zoukankan      html  css  js  c++  java
  • C语言 ## __VA_ARGS__ 宏

    在GNU C中,宏可以接受可变数目的参数,就象函数一样

    可以把__VA_ARGS__看成是将...赋值给该宏

    //注意这里不能在函数中调用abc()
    
    #include <stdio.h>
    #include <stdarg.h>
    
    #define ABC(...) printf(__VA_ARGS__)
    
    /*void abc(...)
    {
        //printf(__VA_ARGS__);
    }*/
    int main()
    {
        ABC("%s
    ","hello");
        return 0;
    }

    注意上面说的是宏可以接受可变参数,而不是用函数(函数中涉及的可变数目参数问题需要用到va_list)。

    另外__VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加 上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。

  • 相关阅读:
    MaaS系统概述
    流处理认识
    事务补偿
    Hystrix原理与实战
    RPC概念和框架
    git remote: error: hook declined to update
    Unity CombineTexture
    Windows Powershell统计代码行数
    unity面试题二
    unity面试题一
  • 原文地址:https://www.cnblogs.com/cdwodm/p/4438112.html
Copyright © 2011-2022 走看看