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 

  • 相关阅读:
    Day Six(Beta)
    Day Five (beta)
    Day Four(Beta)
    Day Three(Beta)
    Day Two(Beta)
    Day One(Beta)
    项目冲刺——总结
    beta版本贡献率
    软件工程实践总结
    团队作业--Beta版本冲刺
  • 原文地址:https://www.cnblogs.com/MrYuan/p/5976464.html
Copyright © 2011-2022 走看看