2012-02-06 41 views
1
#define TEST(X, ...)  X ## __VA_ARGS__ // (1) 
#define TEST(X, args...) X ## args   // (2) 

语法是他们之间有没有功能区别? (即,在某些情况下,其中一个可以以更好的方式使用,其他则可以使用其他方式)。另外,C++ 11中包含的语法都是?2个不同的可变参数宏

回答

2

第一种语法是标​​准C99和标准C++ 11。第二,我相信,GNU特定的扩展。

+1

在C99中,(2)给你一个关于gcc的错误。我相信你的意思是一个GNU ** CPP **扩展。 – 2012-02-06 04:29:08

+0

@Jesse:我肯定会允许(1)和(2)由预处理器处理。我不确定你的意思是“在C99中,(2)给你一个gcc的错误。”你的意思是用'gcc --std = c99'编译?或者你是否在没有预处理器的情况下编译? – Managu 2012-02-06 04:53:41

+0

我相信你需要'gcc -Wall -pedantic -std = c99'来产生警告:ISO C不允许命名可变宏。 – 2012-02-06 05:08:48