除了-Wall还有其他人发现有用的警告吗?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
答案 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