为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
- 指向方法的返回types的“预期types”错误
- 多重返回语句没有编译器错误
- 'NSInvalidArgumentException',原因:'无法parsing约束格式'
- XCode 4.1致命错误:自编译预编译头之后,修改了stdlib
- 不能将types'System.Collections.Generic.IEnumerable <AnonymousType#1>'隐式转换为'System.Collections.Generic.List <string>
- C编译错误:“可变大小的对象可能不会被初始化”
- cc1plus:错误:无法识别的命令行选项“-std = c ++ 11”与g ++
- 编译时QVision Widget错误
- 为什么这个通用代码在java 8中编译?