__VA_ARGS__是C语言设定的一个预定义宏,用于处理可变参数的参数列表。通常用在宏定义中,以便宏可以接收不定数量的参数,并将他们作为整体处理。 通常的函数参数列表都是固定的,但也存在着不定参数数量的函数,如:printf,为了定义可以处理不同参数个数的宏,C99标准引入了VA_ARGS,下列的代码均在C99及C99以上标准的
VA_ARGS是一个可变参数的宏,是新的 C99 规范中新增的,目前似乎只有 gcc 支持( VC 从 VC2005 开始支持)。 VA_ARGS需要配合 define 使用,总体来说就是将左边宏中 .. 的内容原样抄写在右边VA_ARGS所在的位置; 举个例子: #definemyprintf(...)printf( __VA_ARGS__) 示例代码如下: /***/ //@Author:猿...
3、__VA_ARGS__ 和 ##__VA_ARGS__ #include "stdio.h" #define DEBUG1(format, ...) do{ \ printf(format, __VA_ARGS__); \ \ }while(0) #define DEBUG2(format, args...) do{ \ printf(format,##args); \ \ }while(0) #define DEBUG3(format, ...) do{ \ printf(format,##_...
对于第1次调用,__VA_ARGS__展开为1个参数:"Howdy"。 对于第2次调用,__VA_ARGS__展开为3个参数:"Weight = %d, shipping = $%.2f\n"、wt、sp。 因此,展开后的代码是: printf("Howdy"); printf("Weight = %d, shipping = $%.2f\n", wt, sp); 演示用例如下: // variadic.c -- variadic ...
一.__VA_ARGS__简介 二.__VA_ARGS__使用 1.__VA_ARGS__宏输出字符串常量 2.__VA_ARGS__宏输出可变参数 三.__VA_ARGS__缺点 1.仅仅只支持字符串常量,不支持可变参数 2.仅仅只支持可变参数,不支持字符串常量 四.猜你喜欢 零基础 C/C++ 学习路线推荐 :C/C++ 学习目录>>C 语言基础入门 ...
printf(format, ##__VA_ARGS__); \ \ } while(0) int main(int argc, char **argv) { printf("hello world.1 \n"); //DEBUG1("hello world.2\n");//错误 参数为零 DEBUG1("hello world.2 %d %d\n", 1, 2); DEBUG2("hello world.3\n"); ...
二.__VA_ARGS__使用 DATE当前日期,一个以 “MMM DD YYYY” 格式表示的字符串常量。 TIME当前时间,一个以 “HH:MM:SS” 格式表示的字符串常量。 FILE这会包含当前文件名,一个字符串常量。 LINE这会包含当前行号,一个十进制常量。 STDC当编译器以 ANSI 标准编译时,则定义为 1;判断该文件是不是标准 C 程...
// 计算 __VA_ARGS__ 参数个数,最大支持64个参数 #define FL_ARG_COUNT(...) FL_INTERNAL_ARG_COUNT_PRIVATE(0, ##__VA_ARGS__,\ 64, 63, 62, 61, 60, \ 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, \ 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \ 39, 38, 37, 36...
va_start(args, count);:初始化args以便访问从count之后开始的可变参数。 total += va_arg(args, int);:使用va_arg宏获取下一个可变参数,这里假设它们都是int类型,并将其累加到total变量中。 va_end(args);:清理args,以便释放资源并避免未定义行为。
va_start(args, count);:初始化args以便访问从count之后开始的可变参数。 total += va_arg(args, int);:使用va_arg宏获取下一个可变参数,这里假设它们都是int类型,并将其累加到total变量中。 va_end(args);:清理args,以便释放资源并避免未定义行为。