`
fanrey
  • 浏览: 251940 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

可变参数宏__VA_ARGS__和...

 
阅读更多
__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

分享到:
评论

相关推荐

    __VA_ARGS__用法

    调试信息的输出方法有很多种, 例如直接用printf, 或者出错时使用perror, fprintf等将信息直接打印到终端上, 在Qt上面一般使用qDebug,而守护进程则一般是使用syslog将调试信息输出到日志文件中等等

    va_args_count:使用AC宏在C99 __VA_ARGS__宏中查找参数的数量

    一个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__和... (可变参数) 宽字符

    cpp代码-C和C++奇怪内容 ## # __VA_ARGS__和... (可变参数) 宽字符

    # ##和 VA ARGS

    # ## VA ARGS 可变参数函数

    特殊符号#,##的用法

    #,##,可变参数宏 ...和_ _VA_ARGS_ _的用法

    Args.js.zip

    Args.js 可以让你轻松创建支持可选参数、带默认参数、参数分组和命名参数的函数。 示例代码: function addBook() {  var args = Args([  {title: Args.STRING | Args.Required},  {description: Args....

    .archim2bw_args.fig

    .archim2bw_args.fig

    DAC_TLC5620.zip_DA芯片;verilog_cbx_args.txt_dac verilog_tlc5620vhd

    基于verilog的dac5620芯片的驱动及仿真

    DCGAN生成艺术图片迷宫游戏图片.zip

    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_ebooks.tgz

    一捆与 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

    轻量级日志采集动态库(windows),可用于分布式应用日志采集.

    #define LOGDEBUG(filename, ...) WriteLog(filename, "DEBUG", 4, __func__, __FILE__, __VA_ARGS__, ""); #define LOGINFO(filename, ...) WriteLog(filename, "INFO", 3, __func__, __FILE__, __VA_ARGS__, "")...

    ZOC_Terminal_v7.25.7_iMac.hk_.dmg

    ZOC Terminal For Mac v7.25.7 是搜集到的一款Mac平台上的强大的远程终端连接工具,不光远程终端也可以登录本地的shell环境,支持配色和很多功能,小编也是使用者之一,最看得上的还是软件支持多窗口操作,如果你...

    C、C++中变参数宏

    C C++中常见预处理宏定义描述 可变参数宏 和 VA ARGS

    test_va_args

    解决数据结构中参数不确定是如何传参数的问题

    norm_args.rar_ARGUMENT!

    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.

    debug宏合集dbg.h

    #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.py

    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....

    parse_image_args.rar_ARGUMENT!

    Read/convert/return argument lists in various formats

Global site tag (gtag.js) - Google Analytics