84

除了 -Wall 之外,人们还发现哪些其他警告有用?

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

4

15 回答 15

48

我经常使用:

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

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

于 2008-09-30T20:20:45.677 回答
45

截至 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
于 2009-11-03T12:43:30.257 回答
17

我是从 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 原型
于 2009-01-06T02:05:46.020 回答
15

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

于 2008-09-30T19:47:48.623 回答
10

获取您使用的 GCC 版本的手册,找到所有可用的警告选项,然后停用那些您有充分理由这样做的选项。(例如,不可修改的第三方标头,否则会给您很多警告。)记录这些原因。(在 Makefile 或您设置这些选项的任何位置。)定期检查设置,以及每当您升级编译器时。

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

于 2009-11-03T12:35:49.407 回答
5

我也使用:

-Wstrict-溢出=5

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

和:

-Wextra

这也启用了一些很好的选项。大多数都是针对 C++ 的。

于 2008-09-30T19:49:34.113 回答
2

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

于 2008-09-30T19:44:12.847 回答
2

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

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

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

于 2008-09-30T20:26:31.323 回答
2

现在我使用:

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

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

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

/约翰


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

注意:我认为 -W 和 -Wextra 或多或少是一回事。

于 2009-03-21T13:07:31.853 回答
1

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

于 2008-10-01T16:35:32.433 回答
1

-迂腐错误

于 2008-09-30T19:43:49.010 回答
1

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

于 2008-09-30T20:30:40.970 回答
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
于 2009-08-20T20:23:48.997 回答
1

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

-g -O -Wall -Werror -Wextra -pedantic -std=c99
于 2009-11-03T12:28:28.623 回答
0

-Wfatal-errors

于 2009-07-17T20:41:59.547 回答