如何在 gcc/g++ 上使用 -Wall 选项并关闭多行注释警告?

问题描述 投票:0回答:3

如标题,如何在 gcc/g++ 上使用 -Wall 选项并关闭多行注释警告?

评论看起来像这样:

// Comment starts here \
// and end here (the // at the beginning is not necessary)
gcc warnings
3个回答
10
投票

您可以使用 /* .. */ 进行多行注释。

    /* 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


1
投票

反斜杠延续会引发警告;如果您以注释开始下一行,则没有必要。

删除反斜杠延续并用

//
替换行开头的反斜杠(如所写,它根本不是注释),您应该消除警告。

您也可以写:

/\
\
* A regular C89 comment with trigraphs for good measure.
*??/
??/
/

任何向我提交该代码供审查的人都会被立即送回去修复它(但可怜那些必须正确处理此类废话的可怜的编译器编写者!)。

至于如何修复它,如果(如评论中提到的),它很普遍,那么你可以看看你的 GCC 版本是否支持

-Wno-comment
来抑制有关多行注释的警告。这可能是最简单的。如果做不到这一点,您必须决定是否可以冒险使用启发式解析器来解决问题:

sed -e 's%\(//.*\)\\$%\1%' -i.bak *.c

(假设 GNU

sed
用于
-i.bak
选项)。这将从任何此类注释中删除结尾的反斜杠。我可以看到这引起麻烦的主要地方是在宏定义中,例如:

#define MACRO(c,d) { (c) = (d) + 1; }  // Comment here \
                                          more comment here

这是一个愚蠢的宏,但是因为注释的第二行没有注释开始,所以

sed
脚本中的启发式替换会给你一个语法上无效的程序(除非你碰巧有这样的宏:这里的更多评论'扩展到有效代码,这不太可能)。

如果启发式机制不起作用,那么也许您需要一个完整的 C 注释剥离器。如果你在互联网上找不到一个程序,我有这样一个程序(它的测试文件包括诸如上面所示的可怕的评论) - 请参阅我的个人资料。


1
投票

GCC 警告记录在此处:http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

具体来说,您正在寻找:

-W评论

每当注释开始序列

/*' appears in a
/*' 注释或每当反斜杠换行符出现在 `//' 注释中时发出警告。此警告由 -Wall 启用。

因此要关闭该警告,您应该能够使用

-Wno-comment

© www.soinside.com 2019 - 2024. All rights reserved.