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



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

注释如下:

// Comment starts here 
// and end here (the // at the begging is not necessary)

你可以使用/* ..*/用于多行注释。

    /* foo bar comment
       lala blah
    */
编辑:

我在另一篇文章中找到了一个解决方案:如何隐藏"定义但未使用"的"海湾合作委员会的警告?

如果你添加了选项-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

具体来说,你要找的是:

-Wcomment

在注释开始序列/*' 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

(假设GNU sed-i.bak选项)。这将从任何此类注释中删除尾随的反斜杠。我可以看到这会导致问题的主要地方是在宏定义中,例如:

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

这是一个空白的宏,但是因为在注释的第二行没有注释开始,所以sed脚本中的启发式替换会给您一个语法上无效的程序(除非您恰好有宏,这样'此处更多注释'扩展为有效代码,这是非常不可能的)。

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

最新更新