zoukankan      html  css  js  c++  java
  • 可变参数宏__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 "); 
    PRINT_DBG(1,"world, %d ",i); 
    MACRO("hello, world "); //这里没有可变参数, 所以要用##__VA_ARGS__ 
    MACRO("hello, %s ", "fanrey"); 
    return 0; 


    编译:gcc -o vaargs vaargs.c 

    运行: ./vaargs 

    vaargs.c main [16]: hello 
    vaargs.c main [17]: world, 100 
    hello, world 
    hello, fanrey 

  • 相关阅读:
    ac与ap同步分析
    ipsec原理(转载)
    Sublime Text自定制代码片段(Code Snippets)
    IPsec分析/测试/
    jQuery 学习
    windows pip 安装 转载
    转载 pep8安装
    转载别人的ftp,觉得目录结构不错,学习
    博客园 CSS 代码定制
    AC自动机
  • 原文地址:https://www.cnblogs.com/lidabo/p/4570952.html
Copyright © 2011-2022 走看看