美文网首页
用宏解决C语言变参函数无法获取参数数量的问题

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

作者: herolin0306 | 来源:发表于2017-09-25 22:32 被阅读0次

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

    #include <stdio.h>
    
    #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<count;i++) {
            sum += *(buf + i);
        }
        return sum;
    }
    
    int main(int argc, char *argv[])
    {
        int sum = 0;
        
        CALC_SUM(&sum, 1, 2, 3);        //直接填入参数,无需填入数量 
        printf("sum = %d\r\n", sum);
        
        CALC_SUM(&sum, 4, 5, 6, 7, 8);  //直接填入参数,无需填入数量 
        printf("sum = %d\r\n", sum);
        
        return 0;
    }
    

    运行结果:
    sum = 6
    sum = 30

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

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/nmcjextx.html