像标题一样,如何在 gcc/g++ 上使用 -Wall 选项并关闭多行注释警告?
评论看起来像这样:
// Comment starts here \
// and end here (the // at the begging is not necessary)
您可以使用 /* .. */ 作为多行注释。
/* foo bar comment
lala blah
*/
编辑:
我在这里的另一篇文章中找到了解决方案:如何在 GCC 中隐藏“已定义但未使用”的警告?
如果添加选项 -Wno-comment,则警告消失。
gcc -Wall -Wno-comment test.c -o test
它也在这里解释:http: //gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
最好的祝愿,马蒂亚斯
GCC 警告记录在这里: http: //gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
具体来说,您正在寻找:
-W评论
每当注释开始序列
/*' appears in a
/*' 注释或反斜杠换行符出现在 `//' 注释中时都会发出警告。此警告由 -Wall 启用。
因此,要关闭该警告,您应该能够使用-Wno-comment
.
反斜杠继续引发警告;如果您以注释开头开始下一行,则没有必要。
删除反斜杠继续并将行开头的反斜杠替换为//
(如所写,它根本不是评论),您应该消除警告。
你也可以写:
/\
\
* A regular C89 comment with trigraphs for good measure.
*??/
??/
/
并且任何向我提交该代码以供审查的人都会被立即送回以修复它(但可怜的编译器编写者必须正确处理这些废话!)。
至于如何修复它,如果(如评论中提到的)它很普遍,那么您可以查看您的 GCC 版本是否支持-Wno-comment
抑制有关多行注释的警告。这可能是最简单的。如果做不到这一点,您必须决定是否可以冒险使用启发式解析器来解决问题:
sed -e 's%\(//.*\)\\$%\1%' -i.bak *.c
sed
(假设选择GNU -i.bak
)。这会从任何此类注释中删除尾部反斜杠。我可以看到这导致麻烦的主要地方是宏定义,例如:
#define MACRO(c,d) { (c) = (d) + 1; } // Comment here \
more comment here
这是一个空洞的宏,但是因为注释的第二行没有注释开始,sed
脚本中的启发式替换会给你一个语法上无效的程序(除非你碰巧有这样的宏,比如“这里有更多评论”扩展为有效代码,这不太可能)。
如果启发式机制不起作用,那么也许您需要一个完整的 C 注释剥离器。如果你在 Internet 上的某个地方找不到,我有一个这样的程序(它的测试文件包括上面显示的令人毛骨悚然的评论)——请参阅我的个人资料。