码迷,mamicode.com
首页 > 编程语言 > 详细

C语言 ## __VA_ARGS__ 宏

时间:2015-04-18 21:50:45      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

在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\n","hello");
    return 0;
}

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

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

 

C语言 ## __VA_ARGS__ 宏

标签:

原文地址:http://www.cnblogs.com/cdwodm/p/4438112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!