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

时间:2013-01-10 19:52:40

标签: gcc warnings

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

评论看起来像这样:

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

3 个答案:

答案 0 :(得分:8)

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

    /* foo bar comment
       lala blah
    */

编辑:

我在另一篇文章中找到了一个解决方案:How can I hide "defined but not used" warnings in GCC?

如果添加选项-Wno-comment,则警告消失。

    gcc -Wall -Wno-comment test.c -o test

这里也解释了:http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

最好的祝福, 马蒂亚斯

答案 1 :(得分:1)

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

具体来说,您正在寻找:

  

-Wcomment

     
    

每当评论开始序列/*' appears in a / *'发表评论时,或者在“//”评论中出现反斜杠换行符时发出警告。 -Wall启用此警告。

  

因此,要关闭此警告,您应该可以使用-Wno-comment

答案 2 :(得分:0)

反斜杠继续引发警告;如果您以评论开始开始下一行,则没有必要。

删除反斜杠延续并用//替换行开头的反斜杠(如所写的,它根本不是注释),你应该平息警告。

你也可以写:

/\
\
* 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评论剥离器。如果你在某个地方找不到一个,我有这样一个程序(其测试文件包括上面显示的可怕的评论) - 请参阅我的个人资料。