用宏解决C语言变参函数无法获取参数数量的问题

最近在做一个LED blink函数库的时候,打算用变参函数来作为api,但是众所周知,变参函数需要传入参数的数量,而参数的数量只能靠编程者自己计算,稍有不慎就会出错,于是自己写了一个宏,可以实现类似变参函数的效果而无需传入参数数量,下面用最常见的求和函数进行示例:

#include 

#define CALC_SUM(ret_p, ...) \
        do { \
            int arg[] = {__VA_ARGS__}; \
            if (ret_p)  *(int *)(ret_p) = calc_sum(arg, sizeof(arg)/sizeof(int)); \
            else    calc_sum(arg, sizeof(arg)/sizeof(int)); \
        }while(0)
    
int calc_sum(int *buf, int count)
{
    int sum = 0;
    int i;
    for (i=0;i

运行结果:
sum = 6
sum = 30

其实本质上就是用int arg[] = {VA_ARGS}对宏的变参部分构造了一个局部变量数组,便于求出参数的数量。

5月份注册的,今天才写第一篇文章啊,转载请注明出处哦^_^

你可能感兴趣的:(用宏解决C语言变参函数无法获取参数数量的问题)