除了 -Wall 之外,人们还发现哪些其他警告有用?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
除了 -Wall 之外,人们还发现哪些其他警告有用?
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
这个集合对于不习惯它的人来说非常有用(我第一次用这些标志编译他们的代码的人);它很少给我带来问题(尽管 -Wcast-qual 偶尔会令人讨厌)。
截至 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 样式定义 -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-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
我是从 C++ 开始的,所以当我转而学习 CI 时,一定要在肛门外:
-f消息长度=0 -ansi -pedantic -std=c99 -错误 -墙 -Wextra -Wwrite-strings -Winit-self -Wcast-对齐 -Wcast 质量 -Wpointer-arith -Wstrict-aliasing -W格式=2 -Wmissing-declarations -Wmissing-include-dirs -Wno-未使用的参数 -未初始化 -Wold-style-定义 -Wstrict-prototypes -Wmissing 原型
我喜欢-Werror。保持代码警告免费。
获取您使用的 GCC 版本的手册,找到所有可用的警告选项,然后仅停用那些您有充分理由这样做的选项。(例如,不可修改的第三方标头,否则会给您很多警告。)记录这些原因。(在 Makefile 或您设置这些选项的任何位置。)定期检查设置,以及每当您升级编译器时。
编译器是你的朋友。警告是你的朋友。给编译器尽可能多的机会告诉你潜在的问题。
我也使用:
-Wstrict-溢出=5
如果我编写依赖于整数溢出行为的代码,则捕获那些可能发生的讨厌的错误。
和:
-Wextra
这也启用了一些很好的选项。大多数都是针对 C++ 的。
我通常使用“-W -Wall -ansi -pedantic”进行编译,这有助于确保代码的最大质量和可移植性。
-pedantic -Wall -Wextra -Wno-write-strings -Wno-unused-parameter
对于“伤害我很多”模式,我放弃了 -Wno ...
我喜欢让我的代码没有警告,尤其是 C++。虽然通常可以忽略 C 编译器警告,但许多 C++ 警告显示源代码中存在根本缺陷。
现在我使用:
-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
我主要从“gcc 简介”一书中获取该列表,然后从Ulrich Drepper关于防御性编程的推荐中获取一些列表(http://people.redhat.com/drepper/Defensive-slides.pdf)。
但我的清单背后没有任何科学依据,它只是感觉像是一个很好的清单。
/约翰
注意:虽然我不喜欢那些迂腐的旗帜......
注意:我认为 -W 和 -Wextra 或多或少是一回事。
-Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wextra -Werror-implicit-function-declaration -Wunused -Wno-unused-value -Wreturn-type
-迂腐错误
-Wfloat-equal, -Wshadow, -Wmissing-prototypes,
我一般只用
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
除非您指定,否则有关未初始化变量的警告将不起作用-O
,因此我将其包含在列表中:
-g -O -Wall -Werror -Wextra -pedantic -std=c99
-Wfatal-errors