当前位置:  开发笔记 > 编程语言 > 正文

C/C++编译器的最佳编译器警告级别?

如何解决《C/C++编译器的最佳编译器警告级别?》经验,为你挑选了5个好方法。

您为不同的C/C++编译器推荐了什么编译器警告级别?

gcc和g ++会让你在默认级别上获得很多东西.我发现对我来说最好的警告级别是'-Wall'.我总是试图删除修复它生成的警告的代码.(即使是愚蠢的关于使用括号进行逻辑优先规则或者说我的意思是'if(x = y)')

对于不同的编译器,您最喜欢的级别是什么,例如Sun CC,aCC(HPUX?),Visual Studio,intel?

编辑:

我只想指出我在gcc/g ++上没有使用"-Werror"(但我确实理解它的实用性),因为我使用:

#warning "this is a note to myself"

在我的代码中的几个地方.所有编译器都了解#warning宏吗?



1> Alexander L...:

这是我用于C++代码的一组超偏执的标志:

    -g -O -Wall -Weffc++ -pedantic  \
    -pedantic-errors -Wextra -Waggregate-return -Wcast-align \
    -Wcast-qual  -Wchar-subscripts  -Wcomment -Wconversion \
    -Wdisabled-optimization \
    -Werror -Wfloat-equal  -Wformat  -Wformat=2 \
    -Wformat-nonliteral -Wformat-security  \
    -Wformat-y2k \
    -Wimplicit  -Wimport  -Winit-self  -Winline \
    -Winvalid-pch   \
    -Wunsafe-loop-optimizations  -Wlong-long -Wmissing-braces \
    -Wmissing-field-initializers -Wmissing-format-attribute   \
    -Wmissing-include-dirs -Wmissing-noreturn \
    -Wpacked  -Wpadded -Wparentheses  -Wpointer-arith \
    -Wredundant-decls -Wreturn-type \
    -Wsequence-point  -Wshadow -Wsign-compare  -Wstack-protector \
    -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch  -Wswitch-default \
    -Wswitch-enum -Wtrigraphs  -Wuninitialized \
    -Wunknown-pragmas  -Wunreachable-code -Wunused \
    -Wunused-function  -Wunused-label  -Wunused-parameter \
    -Wunused-value  -Wunused-variable  -Wvariadic-macros \
    -Wvolatile-register-var  -Wwrite-strings

这应该会给你一些入门的东西.根据项目的不同,您可能需要对其进行调整,以便不会看到来自第三方库的警告(通常对于免费警告非常粗心.)例如,Boost矢量/矩阵代码将使g ++发出很多噪音

处理这种情况的一种更好的方法是编写一个围绕g ++的包装器,它仍然使用调整到最大值的警告但允许人们禁止它们被特定文件/行号看到.我很久以前就写过这样一个工具,一旦我有时间清理它就会释放它.



2> Paulius..:

在Visual C++上,我使用/W4/WX(将警告视为错误).

VC也有/Wall,但它与标准头不兼容.

我选择将警告视为错误,因为这迫使我修复它们.我修复了所有警告,即使这意味着要添加#pragma忽略警告 - 这样,我明确说明,我知道警告(因此其他开发人员不会通过电子邮件发送给我).


我们有明确不注意的具体警告,以及其他一切的清晰编译(无警告)政策.

3> xtofl..:

我相信VC也支持

#pragma message ("note to self")

但是随着系统的发展和成长,你每晚都会有30个开发人员同时工作,所以需要花费几天的时间来阅读所有自己的笔记,即使是自我将会做什么,除了笔记阅读,最后去在压力下无法跟上而不得不辞职......

实际上,如果允许它们,警告的数量很快就会增长,而且你将无法发现真正重要的警告(未初始化的变量,构造函数中使用的这个指针,......).

这就是我尝试将警告视为错误的原因:大多数情况下,编译器正确警告我,如果不是,我会在代码和前置文件中记录它

#pragma warning ( push )
#pragma warning ( 4191 : disable )
// violent code, properly documented
#pragma warning ( pop )

我刚读过他们也有一个warning ( N : suppress )pragma.



4> Johannes Sch..:

我倾向于使用-Wall(因为每个人都-Werror犯错误,没有人是完美的),但我不使用(将警告视为错误),因为现在和gcc警告无论如何都是正确的事情(误报).


保利乌斯,如果它向我发出100次警告,我将修复这些,所以我只剩下一些警告,我不必担心.使用好的库可以不使用警告消息页面.什么codelogic说.我有定期的"警告杀戮"阶段,我杀了他们:)

5> codelogic..:

我同意litb总是使用-Wall.此外,如果您想确保您的代码符合规定,您也可以使用-pedantic.如果您在字节级别处理联合和结构,则另一个警告可能是有用的-Wpadded.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有