C的推荐gcc警告选项

时间:2008-09-30 19:42:36

标签: c gcc compiler-errors

除了-Wall还有其他人发现有用的警告吗?

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

15 个答案:

答案 0 :(得分:45)

我经常使用:

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

对于那些不习惯它的人来说这个集合很多(我的代码是第一次用这些标志编译的人);它很少给我一个问题(尽管-Wcast-qual偶尔也会令人讨厌)。

答案 1 :(得分:35)

截至2011-09-01,使用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 -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

答案 2 :(得分:15)

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

答案 3 :(得分:15)

我从C ++开始,所以当我切换到学习C时,我确保是肛门:

-fmessage-length=0
-ansi -pedantic -std=c99
-Werror
-Wall
-Wextra
-Wwrite-strings
-Winit-self
-Wcast-align
-Wcast-qual
-Wpointer-arith
-Wstrict-aliasing
-Wformat=2
-Wmissing-declarations
-Wmissing-include-dirs
-Wno-unused-parameter
-Wuninitialized
-Wold-style-definition
-Wstrict-prototypes
-Wmissing-prototypes

答案 4 :(得分:9)

获取您使用的GCC版本的手册,找到所有可用的警告选项,然后停用 那些引人注目的 >这样做的理由。 (例如,不可修改的第三方标题会给你很多警告。)记录这些原因。(在Makefile中或在你设置这些选项的任何地方。)查看常规intervalls的设置,以及每当升级编译器时。

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

答案 5 :(得分:5)

我也用:

  

-Wstrict溢出= 5

如果我编写的代码依赖于整数的溢出行为,那么要抓住可能发生的那些讨厌的错误。

  

-Wextra

这使得一些选项也很好。大多数都是针对C ++的。

答案 6 :(得分:2)

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

答案 7 :(得分:2)

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

对于“伤害我很多”模式,我放弃了-Wno ......

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

答案 8 :(得分:1)

-pedantic-错误

答案 9 :(得分:1)

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

答案 10 :(得分:1)

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

答案 11 :(得分:1)

现在我使用:

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

我主要从“gcc简介”一书中选择了这个列表,然后从Ulrich Drepper推荐了一些关于防御性编程的文章(http://people.redhat.com/drepper/Defensive-slides.pdf)。

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

/约翰


注意:我不喜欢那些迂腐的旗帜......

注意:我认为-W和-Wextra或多或少是相同的。

答案 12 :(得分:1)

我通常只使用

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

答案 13 :(得分:1)

除非您指定-O,否则有关未初始化变量的警告不起作用,因此我将其包含在我的列表中:

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

答案 14 :(得分:0)

-Wfatal-errors