问题 清理C / C ++代码会发现可变参数宏的问题


我们正在C,C ++和Java的代码库上进行一些代码清理,修复有符号/无符号比较,运行静态分析等。

我们得到的警告之一是

warning: ISO C does not permit named variadic macros

和它的同伴警告

warning: ISO C99 requires rest arguments to be used

现在,在我使用的C代码中 C99标准可变参数宏 解决问题,但在C ++代码中,正确的答案是什么?使用相同的C99样式会产生不同的警告

warning: anonymous variadic macros were introduced in C99 

我没有看到任何答案。

我们在Linux中使用GCC(G ++)4.4.3。

我希望有一些标志或其他方法可以纠正或禁用它的特定代码部分 - 但它用于几乎每个文件中使用的日志...


11369
2018-03-19 17:54


起源

可能重复 Variadic宏是非标准的吗? - Bo Persson
使用C ++ 11。类型 -std=c++0x 要么 -std=c++11 在您的GCC命令行上。或者只是忽略警告。 - Kerrek SB
是的,使用c ++ 11尚未出现,它的支持还不够好(尚) - Petriborg
所以你基本上都在说@ Bo-Persson没有办法消除警告(没有关闭它们),因为在C ++ 11之前,变量宏不是C ++的标准配置? - Petriborg
@Petri - 我现在没有任何其他方式。 gcc 4.4.3可能不知道C ++的最新变化。 - Bo Persson


答案:


使用gcc选项 -Wno-variadic-macros 禁用该特定警告。

编辑:(来自评论)

要禁用某段代码的警告但通常将其保留,请使用 #pragma GCC diagnostic  这里描述

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wno-variadic-macros"

    // Your code and/or include files
    // (No variadic warnings here)

#pragma GCC diagnostic pop

13
2018-03-19 18:03



有没有办法禁用一段代码的警告,但一般情况下保持开启?如果我使用这个如何禁用 warning: ISO C99 requires rest arguments to be used - Petriborg
@Petriborg: gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/... - Hasturkun
谢谢@Hasturkun我会试试 - Petriborg
这个pragma对于我来说在臭老的gcc-4.2.3中并不起作用,但-Wno-variadic-macros完成了这项工作,所以投了票。 - Martin Dorey
那 pragma对我来说也不起作用,但我得到了它 #pragma GCC diagnostic ignored "-Wvariadic-macros" (没有 no-) - Davide