2016-02-23 73 views
2

什么是海湾合作委员会(我正在使用GCC 5.3.0)零变量宏参数的编译器警告标志?GCC编译器警告标志零变量宏参数

该警告是通过这样的代码

// for illustration purposes only: 
int foo(int i) { return 0; }; 
#define FOO(A, ...) foo(A, ##__VA_ARGS__) 
FOO(1); 
    ^warning: ISO C++11 requires at least one argument for the "..." in a variadic macro 

触发,但警告不指示哪个标志被用于启用/禁用警告(这是在方括号[-Wwarning-flag-name]通常示出)。

在叮当中,它是-Wgnu-zero-variadic-macro-arguments。我在warning documentation of gcc-5.3.0中找不到类似的东西。

我试过-Wgnu-zero-variadic-macro-arguments,-Wvarargs,-Wno-variadic-macros(感谢@ Revolver_Ocelot)但这些警告都没有负责。

+0

你到底想要达到什么目的?它看起来不像'foo(int i)',它的定义方式使它与可变参数宏兼容。 – Xirema

+0

@Xirema我试图禁用一个警告,该示例仅用于说明目的。 – gnzlbg

+0

[这个问题](http://stackoverflow.com/questions/11761703/overloading-macro-on-number-of-arguments)可能会有所帮助。您可以用不同数量的变量“重载”宏,以便具有一个参数的宏有效。 – callyalater

回答

2

导致此问题的警告标志是-Wpedantic。这是因为省略可变参数是非法的,它需要诊断。警告符合该要求。