zoukankan      html  css  js  c++  java
  • 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;
    }
    
    

    详见参考

  • 相关阅读:
    关于相机权限
    JDBC插入中文出现乱码问题
    记一次Java代码的部署
    Java-final关键字
    Java枚举使用详解
    临时表
    Oracle 11g 建表 表名大小写问题
    ORA-04021等待锁定对象时超时
    Oracle 查询时间差几天
    NVL()
  • 原文地址:https://www.cnblogs.com/starrytales/p/5809555.html
Copyright © 2011-2022 走看看