2012-02-06 43 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