我想压制GCC可变参数宏参数警告零个参数,例如通过生产中:如何抑制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
了当使用GCC 5.3.0时,源文件中的特定宏定义。
在铛,这是为完成如下:
// ... large file
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
#define FOO(A, ...) foo(A, ##__VA_ARGS__)
#pragma clang diagnostic pop
// ... large file
// not necessary on the same file
FOO(1); // doesnt trigger the warning
在GCC它看起来像-pedantic
是一个神奇的一种警告类型的,只是下面不工作:
// ... large file
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
#define FOO(A, ...) foo(A, ##__VA_ARGS__)
#pragma GCC diagnostic pop
// ... large file
只是为了要清楚,在整个程序中应该启用警告,除了这个特定的代码片段。这是关于细粒度控制。只要不将-pedantic
传递给编译器就可以在整个程序中禁用GCC中的警告。
[零个可变参数宏参数GCC编译器警告标志(的可能的复制http://stackoverflow.com/questions/35586426/gcc-compiler -warning-flag-for-zero-variadic-macro-arguments) – Zulan
@Zulan该问题询问可以禁用此警告的警告标志的名称。该问题询问如何使用该警告标志在源文件的宏定义中禁用此警告(您的答案在这里更合适)。 – gnzlbg
我建议只编辑原始问题以阐明你的意图。 – Zulan