1
私は次のコードを持っている:gcc -E
を使用して、バリデーションマクロ - 省略記号の前のカンマ?
#define MACRO(x...) x
MACRO(foo,bar)
を、MACRO
はfoo,bar
に展開することを示しています。しかし、C11標準では、関数のようなマクロの次の構文を定義しています。x...
ビットを許可するように見える
# define identifier lparen identifier-list opt) replacement-list new-line # define identifier lparen ...) replacement-list new-line # define identifier lparen identifier-list , ...) replacement-list new-line
どれも。奇妙なことに、上のスニペットはfoo,bar
に、#define MACRO(x, ...) x
はfoo
に正しく展開されます。これはgccのバグですか、何か不足していますか?
EDIT:これはgcc拡張であると思われ、hereと記載されています。