• C语言可变参数宏及‘##’在可变参数中的作用


    测试代码及解释:

    #include <stdio.h>
    #define PRINT(x) printf x
    
    #define SECONDPRINT(fmt,arg...) printf(fmt,##arg)
    //如果可变参数被忽略或为空,'##'操作将使预处理器(preprocessor)去除掉它前面的那个逗号
    
    #define THIRDPRINT(fmt,arg...) printf(fmt,arg)
    //上述定义方式在标准C里,你不能省略可变参数,否则是非法的,但是你却可以给它传递一个空(NULL)的参数
    
    #define debug(format, ...) printf (format, __VA_ARGS__)
    //保留名 __VA_ARGS__ 把参数传递给宏,解释同上
    
    int main(void){
    
      PRINT(("test: %s
    ","one "));
      SECONDPRINT(("test: %s
    ","two "));//括号内作为一个整体处理,然后输出都好运算符最后的数据two
      SECONDPRINT("test: %s
    ","two ");
      
      SECONDPRINT("three
    ");//可变参数可以被忽略
      SECONDPRINT("four %s
    ",NULL);//可变参数可以为空
      
      THIRDPRINT("third:%s
    ","hello");//可变参数不可以被忽略
      THIRDPRINT("third:%s
    ",NULL);//可变参数可以为空
      
      debug("debug:%s
    ","debug");//可变参数不可以被忽略
      return 0;
    }
    
    

    详见参考

  • 相关阅读:
    MySQL多表查询
    多表关联
    MySQL数据类型 约束
    初识数据库
    socker server和 event
    os 模块 和 os模块下的path模块
    sys 模块
    time 模块
    目录规范

  • 原文地址:https://www.cnblogs.com/starrytales/p/5809555.html
Copyright © 2020-2023  润新知