网友收藏 文章浏览阅读5.2k次,点赞3次,收藏23次。用可变参数宏(variadic macros)传递可变参数表你可能很熟悉在函数中使用可变参数表,如:void printf(const char* format, ...);一直以来,可变参数表还是只能应用在真正的函数中,不能使用在宏中......
2023-11-11 18:14 阅读
阅读全文 网友收藏 文章浏览阅读1.7k次,点赞2次,收藏15次。1、#用来把参数转换成字符#include <stdio.h>#define FUN(X) (printf("%s=%d\n",#X,X)) int test(int argc, char ** argv){ int a = 1; int b = 2; FUN(a); FUN(b); ...___va_......
2023-11-11 18:30 阅读
阅读全文 网友收藏 今天阅读代码的时候,在一个宏定义语句中,发现了个之前未曾见过的编译器预定义宏:“__VA_ARGS__”。当时,从代码语句中推测它代表宏参数:“…”(本文称之为省略号),依稀记得printf函数声明中有使用这个省略号,大概......
2023-10-10 02:03 阅读
阅读全文 网友收藏 文章浏览阅读266次。在GNU C中,从C99开始,宏可以接受可变数目的参数,就象可变参数函数一样。和函数一样,宏也用三个点…来表示可变参数VA_ARGS 宏VA_ARGS 宏用来表示可变参数的内容,简单来说就是将左边宏中 … 的内容原样......
2023-11-11 18:14 阅读
阅读全文 网友收藏 文章浏览阅读6.1w次,点赞33次,收藏120次。今天阅读代码的时候,在一个宏定义语句中,发现了个之前未曾见过的编译器预定义宏:“__VA_ARGS__”。当时,从代码语句中推测它代表宏参数:“…”(本文称之为省略号),依稀记......
2023-11-11 18:34 阅读
阅读全文 网友收藏 文章浏览阅读980次,点赞4次,收藏10次。网上很多关于计算可变参数宏 __VA_ARGS__ 的参数个数的帖子很多,但是都是写个宏,告诉别人就是这样写的,用就对了,但是都没有解释其中的道理。对于大多说人来说,知道这样用就够......
2023-11-11 18:39 阅读
阅读全文 网友收藏 文章浏览阅读799次。可变参数宏__VA_ARGS____VA_ARGS__是一个可变参数的宏,定义时宏定义中参数列表的最后一个参数为省略号,在实际使用时会发现有时会加##,有时又不加。//最简单的定义#define my_print1(...) printf(__VA_ARGS__)//搭配va_l......
2023-11-11 17:57 阅读
阅读全文 网友收藏 文章浏览阅读623次,点赞4次,收藏2次。‘#’ 和 ‘##’ 属于预处理标记。‘#’ 和 ‘##’ 用于类似函数的宏定义中(或者简称为宏定义函数)。‘__VA_ARGS__’ 是 C99 引入的用于支持宏定义函数中使用可变参数。操作符 ‘#’在宏......
2023-11-11 18:52 阅读
阅读全文 网友收藏 文章浏览阅读1.4k次,点赞2次,收藏11次。目录一.__VA_ARGS__简介二.__VA_ARGS__使用1.__VA_ARGS__宏输出字符串常量2.__VA_ARGS__宏输出可变参数三.__VA_ARGS__缺点1.仅仅只支持字符串常量,不支持可变参数2.仅仅只支持可变参数,不支持字符......
2023-11-11 18:23 阅读
阅读全文 网友收藏 文章浏览阅读903次。函数的可变参数的实现方式有两种:1.通过库函数stdarg.h实现先贴代码int add(int n,...){ int i = 0; int sum = 0; va_list ap; va_start(ap,n); for(i = 0;i < n;i++) { sum += va_arg(ap,int); ..._va_arg函数...
2023-11-11 18:47 阅读
阅读全文