C++ 可变宏的2种不同语法
它们之间有什么功能上的区别吗?(即,在某些情况下,其中一个可以比另一个更好地使用)。另外,这两种语法都包含在C++11中吗?第一种语法是标准C99,也是标准C++11。第二个,我相信是GNU特定的扩展。在C99中,(2)给出了一个关于gcc的错误。我相信你的意思是GNUCPP扩展。@Jesse:我当然会允许(1)和(2)由预处理器处理。我不知道你说的“在C99中,(2)在gcc上给你一个错误”是什么意思。你是说用C++ 可变宏的2种不同语法,c++,c,syntax,variadic-macros,C++,C,Syntax,Variadic Macros,它们之间有什么功能上的区别吗?(即,在某些情况下,其中一个可以比另一个更好地使用)。另外,这两种语法都包含在C++11中吗?第一种语法是标准C99,也是标准C++11。第二个,我相信是GNU特定的扩展。在C99中,(2)给出了一个关于gcc的错误。我相信你的意思是GNUCPP扩展。@Jesse:我当然会允许(1)和(2)由预处理器处理。我不知道你说的“在C99中,(2)在gcc上给你一个错误”是什么意思。你是说用gcc编译时--std=C99?或者您是在完全没有预处理器的情况下编译的?我相信您需
gcc编译时--std=C99
?或者您是在完全没有预处理器的情况下编译的?我相信您需要gcc-Wall-pedantic-std=c99
来生成警告:ISO C不允许命名变量宏
。
#define TEST(X, ...) X ## __VA_ARGS__ // (1)
#define TEST(X, args...) X ## args // (2)