为C推荐的gcc警告选项

除了 – 有什么其他警告有人认为有用吗?

http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html

我经常使用:

gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \ -Wstrict-prototypes -Wmissing-prototypes 

这个集合对于那些不习惯的人来说是非常重要的(我第一次用这些标志编写代码的人)。 它很less给我一个问题(虽然有时候质量有点麻烦)。

截至2011年9月1日,使用gcc版本4.6.1

我目前的“发展”别名

 gcc -std = c89 -pedantic -Wall \
     -Wno-missing-braces -Wextra -Wno-missing-field-initializers -Wformat = 2 \
     -WSwitch-default -Wswitch-enum -Wcast-align -Wpointer-arith \
     -Wbad-function-cast -Wstrict-overflow = 5 -Wstrict-prototypes -Winline \
     -Wundef -Wnested-externs -Wcast-qual -Wshadow -Wunreachable-code \
     -Wlogical-op -Wfloat-equal -Wstrict-aliasing = 2 -Wredundant-decls \
     -Wold-style-definition -Werror \
     -ggdb3 \
     -O0 \
     -fno-omit-frame-pointer -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-function-cast -Wstrict-prototypes -Winline -Wundef -Wented-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

我喜欢 – 错误。 保持代码警告免费。

我从C ++开始,所以当我开始学习CI时,一定要做个额外的分析:

 -fmessage长度= 0
 -ansi -pedantic -std = c99
 -Werror
 -壁
 -Wextra
 -Wwrite串
 -Winit自
 -Wcastalignment
 -Wcast-QUAL
 -Wpointer-ARITH
 -Wstrict走样
 -Wformat = 2
 -Wmissing申述
 -Wmissing-包括 - 迪尔斯
 -Wno未使用的参数
 -Wuninitialized
 -WOLD风格的定义
 -Wstrict的原型
 -Wmissing的原型

获取您使用的GCC版本的手册,find所有可用的警告选项 ,然后禁用那些您有充足理由这样做的警告选项 。 (例如,不可修改的第三方标题,否则会给你很多警告。) logging这些原因。 (在Makefile中或设置这些选项的位置。)检查常规intervalls中的设置, 以及每次升级编译器时的设置。

编译器是你的朋友。 警告是你的朋友。 给编译器尽可能多的机会告诉你潜在的问题。

我也使用:

-Wstrict溢出= 5

捕捉那些依赖于整数溢出行为的代码, 可能发生的那些令人讨厌的错误。

和:

-Wextra

这使得一些很好的选项。 尽pipe大多数是用于C ++。

我通常用“-W -Wall -ansi -pedantic”进行编译,这有助于确保代码的最高质量和可移植性。

-pedantic -Wall -Wextra -Wno-write-strings -Wno-unused-parameter

“伤害我很多”的模式,我离开了 – Wno …

我喜欢让我的代码免费警告,尤其是使用C ++。 虽然C编译器警告通常可以忽略,但是许多C ++警告显示了源代码中的根本缺陷。

-pedantic-错误

-Wfloat-equal,-Wshadow,-Wmissing-prototypes,

-Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wextra -Werror-implicit-function-declaration -Wunused -Wno-unused-value -Wreturn-type

现在我用:

-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror

我主要从“GCC入门”一书中获得这个清单,然后从Ulrich Drepper关于防御性编程的一些build议( http://people.redhat.com/drepper/Defensive-slides.pdf )中提出一些清单。

但我没有任何科学背后的科学,只是感觉像一个很好的名单。

/约翰


注:虽然我不喜欢那些迂腐的旗帜….

注意:我认为-W和-Wextra或多或less都是一样的东西。

我通常只是使用

 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 

关于未初始化variables的警告不起作用,除非您指定-O ,所以我将其包含在我的列表中:

 -g -O -Wall -Werror -Wextra -pedantic -std=c99 

-Wfatal-errors