2016-05-11 10 views
1

私は次のコードを持っている:gcc -Eを使用して、バリデーションマクロ - 省略記号の前のカンマ?

#define MACRO(x...) x 
MACRO(foo,bar) 

を、MACROfoo,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, ...) xfooに正しく展開されます。これはgccのバグですか、何か不足していますか?

EDIT:これはgcc拡張であると思われ、hereと記載されています。

答えて

1

GCCには独自のルールがあります。省略記号の前のカンマはパラメータが必要であることを意味し、カンマは省略可能であることを意味します。

関連する問題