我正在使用gcc 7.3。例如,如果我使用int main(){ }
gcc main.c -Wno-foo
,编译成功,并且没有错误输出。
在保持构建命令的同时将源代码更改为int main(){ int a[-1]; /*uncompilable*/ }
会得到我的帮助:
main.c: In function ‘main’:
main.c:3:6: error: size of array ‘a’ is negative
int a[-1];
^
main.c: At top level:
cc1: warning: unrecognized command line option ‘-Wno-foo’
是否可以在不将编译错误引入源代码的情况下强制发出unrecognized command line option ‘-Wno-foo’
警告/错误消息?
-Wfoo
(没有no-
)会立即向我发送警告消息,但我宁愿将no-
留在那儿。 (这是为了进行编译器功能测试,我将其作为构建的一部分。)
答案 0 :(得分:3)
这显然是gcc的功能,而不是bug。来自GCC manual:
当请求无法识别的警告选项时(例如, '-Wunknown-warning'),GCC会发出诊断信息,指出该选项 无法识别。但是,如果使用“ -Wno-”形式,则行为 略有不同:不会针对 “ -Wno-unknown-warning”,除非正在产生其他诊断信息。 这允许在旧的编译器中使用新的'-Wno-'选项,但是如果 出了点问题,编译器警告说无法识别的选项 存在。
因此,如果您需要知道该选项是否存在,则需要在没有no-
的情况下使用它。先做如果发现它受支持,请执行需要使用-Wno-foo
参数的测试。