除了-Wall以外,人们发现其他哪些警告有用?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
Answers:
我通常使用:
gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \
-Wstrict-prototypes -Wmissing-prototypes
对于那些不使用它的人(我的代码第一次被这些标志编译的人)来说,这个集合吸引了很多人;它很少给我带来问题(尽管-Wcast-qual有时会很麻烦)。
-O3
或类似的东西也是一个好主意。仅在优化代码时才会生成警告。
-m32
和和 -m64
(当然,在单独的运行中)可以更好地保护您免受使用printf()
和scaf()
转换规范方面的各种错误的影响。
截至2011-09-01,使用gcc版本4.6.1
我当前的“开发”别名
gcc -std = c89 -pedantic -Wall \ -无遗漏括号-Wextra-无遗漏字段初始化器-Wformat = 2 \ -Wswitch-default -Wswitch枚举-Wcast-align -Wpointer-arith \ -Wbad-function-cast -Wstrict-overflow = 5 -Wstrict-原型-Winline \ -Wundef -Wnested-externs -Wcast-qual -Wshadow -Wunreachable-code \ -Wologic-op -Wfloat-equal -Wstrict-aliasing = 2 -Wredundant-decls \ -Wold样式的定义-Werror \ -ggdb3 \ -O0 \ -fno-省略帧指针-ffloat-store -fno-common -fstrict-aliasing \ -lm
“发布”别名
gcc -std = c89 -pedantic -O3 -DNDEBUG -flto -lm
截至2009-11-03
“开发”别名
gcc -Wall -Wextra -Wformat = 2 -Wswitch-default -Wcast-align -Wpointer-arith \ -Wbad函数转换-Wstrict原型-Winline -Wundef -Wnested-externs \ -Wcast-qual -Wshadow -Wwrite-strings -Wconversion -Wunreachable-code \ -Wstrict-aliasing = 2 -ffloat-store -fno-common -fstrict-aliasing \ -lm -std = c89 -pedantic -O0 -ggdb3 -pg --coverage
“发布”别名
gcc -lm -std = c89 -pedantic -O3 -DNDEBUG --combine -fwhole-program -funroll-loops
-Wfloat-equal
添加到我的别名。谢谢你马克
-Wstrict-aliasing=2
实际上降低了所-Wstrict-aliasing=3
暗示的警告级别-Wall
。
我喜欢-Werror。保持代码自由警告。
#warning
的良好副作用-Werror
。
-Werror
,则默认情况下不会在您的版本中使用它,这会使使用您不同编译器版本的打包程序感到烦恼,因为警告会随编译器版本的变化而变化,有时对您免费发出警告的代码会向其他人发出警告,并且然后他们必须深入研究您的构建系统以将其关闭。
我从C ++开始,所以当我切换到学习CI时,请确保要肛门外:
-fmessage-length = 0 -ansi -pedantic -std = c99 -恐怖 -壁 -Wextra -Wwrite-strings -Winit-self -Wcast-align -Wcast质量 -Wpointer-arith -锯齿锯齿 -Wformat = 2 -遗失声明 -Wmissing-include-dirs -未使用的参数 -未初始化 -老式的定义 -严格的原型 -遗忘原型
我通常使用“ -W -Wall -ansi -pedantic”进行编译,这有助于确保代码的最高质量和可移植性。
-pedantic -Wall -Wextra -Wno写字符串-Wno未使用参数
对于“伤害我很多”模式,我不使用-Wno ...
我喜欢免费提供我的代码警告,尤其是对于C ++。尽管通常可以忽略C编译器警告,但是许多C ++警告显示了源代码中的基本缺陷。
Foo(int dndu, int dndv) : dndu_(dndu), dndv_(dndu) {}
->相对难以发现。如果您因该警告而烦恼,则只需删除参数foo (int /*q*/)
,这也可以提高代码的可读性。
现在我使用:
-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
我主要从《 gcc入门》一书中获得该列表,然后从Ulrich Drepper关于防御性编程的推荐书中获得该列表(http://people.redhat.com/drepper/Defensive-slides.pdf)。
但是我的名单上没有任何科学依据,感觉就像是一份不错的清单。
/约翰
注意:我不喜欢那些书呆子的标志。
注意:我认为-W和-Wextra差不多是同一件事。
我一般只是用
gcc -Wall -W -Wunused-parameter -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wsign-compare -Wconversion -Wshadow -Wcast-align -Wparentheses -Wsequence-point -Wdeclaration-after-statement -Wundef -Wpointer-arith -Wnested-externs -Wredundant-decls -Werror -Wdisabled-optimization -pedantic -funit-at-a-time -o
-Wfatal-errors
-Wdeclaration-after-statement
,以检测MSVC(基本上仍然是C89编译器)无法处理的代码。讨厌。添加“-Wextra
”也可以发现其他一些问题。