__VA_ARGS__ 是一个可变参数的宏(gcc支持)。实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏_ _VA_ARGS_ _就可以被用在替换部分中,替换省略号所代表的字符串。加##用来支持0个可变参数的情况。
测试代码:
#include<stdio.h>
#define PRINT_DBG(debug, ...)\
{\
if(debug) {\
fprintf(stderr, "%s %s [%d]: ", __FILE__, __FUNCTION__, __LINE__);\
fprintf(stderr, __VA_ARGS__);\
}\
}
#define MACRO(s, ...) printf(s, ##__VA_ARGS__)
int main()
{
int i =100;
PRINT_DBG(1,"hello\n");
PRINT_DBG(1,"world, %d\n",i);
MACRO("hello, world\n"); //这里没有可变参数, 所以要用##__VA_ARGS__
MACRO("hello, %s\n", "fanrey");
return 0;
}
编译:gcc -o vaargs vaargs.c
运行: ./vaargs
vaargs.c main [16]: hello
vaargs.c main [17]: world, 100
hello, world
hello, fanrey
分享到:
相关推荐
调试信息的输出方法有很多种, 例如直接用printf, 或者出错时使用perror, fprintf等将信息直接打印到终端上, 在Qt上面一般使用qDebug,而守护进程则一般是使用syslog将调试信息输出到日志文件中等等
一个AC宏,用于在C99 __VA_ARGS__宏中查找参数的数量。 用法 直接使用VA_ARGS_COUNT()宏以int返回传递给它的参数数量。 printf("There are %i arguments.\n", VA_ARGS_COUNT(1, "two", 3.0)); 计数功能参数 就其...
cpp代码-C和C++奇怪内容 ## # __VA_ARGS__和... (可变参数) 宽字符
# ## VA ARGS 可变参数函数
#,##,可变参数宏 ...和_ _VA_ARGS_ _的用法
Args.js 可以让你轻松创建支持可选参数、带默认参数、参数分组和命名参数的函数。 示例代码: function addBook() { var args = Args([ {title: Args.STRING | Args.Required}, {description: Args....
.archim2bw_args.fig
基于verilog的dac5620芯片的驱动及仿真
self.l1 = nn.Sequential(nn.Linear(args.latent_dim, (args.gf * 8) * (self.init_size ** 2))) self.main = nn.Sequential( nn.BatchNorm2d(num_features=args.gf * 8), nn.ReLU(inplace=True), nn....
一捆与 c++17 相关的书籍, 当你下载后肯定会物有所值; Apress.Beginning C++17.pdf C++17_By_Example - 2018.pdf C++17 STL Cookbook.pdf ISOIEC 14882 2017.pdf opengl-4-shading-language-cookbook-3rd.pdf
#define LOGDEBUG(filename, ...) WriteLog(filename, "DEBUG", 4, __func__, __FILE__, __VA_ARGS__, ""); #define LOGINFO(filename, ...) WriteLog(filename, "INFO", 3, __func__, __FILE__, __VA_ARGS__, "")...
ZOC Terminal For Mac v7.25.7 是搜集到的一款Mac平台上的强大的远程终端连接工具,不光远程终端也可以登录本地的shell环境,支持配色和很多功能,小编也是使用者之一,最看得上的还是软件支持多窗口操作,如果你...
C C++中常见预处理宏定义描述 可变参数宏 和 VA ARGS
解决数据结构中参数不确定是如何传参数的问题
Normal transform function interface for assembly code. Simply define FRAME_OFFSET to the number of bytes pushed onto the stack before using the ARG_ argument macros.
#define debug(M, ...) fprintf(stderr, "DEBUG %s:%d: " M "\n", __FILE__, __LINE__, ##__VA_ARGS__) //牛逼 #endif #define clean_errno() (errno == 0 ? "None" : strerror(errno)) #define log_err(M, ...) ...
args.pyargs.pyarargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs.pyargs....
Read/convert/return argument lists in various formats