像标题一样,我如何在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注释剥离器。如果您在互联网上找不到这样的程序,我有这样的程序(它的测试文件包括上面显示的可怕的注释)-请参阅我的个人资料。