-o更改输出文件名(我发现使用--help)
但是我找不到-Wall
做了什么?
答案 0 :(得分:91)
它是“警告所有人”的缩写 - 它(几乎)打开了g ++可以告诉你的所有警告。通常是一个好主意,特别是如果你是初学者,因为理解和修复这些警告可以帮助你解决代码中的许多不同类型的问题。
答案 1 :(得分:27)
见男人gcc。
-Wall 会启用这些警告:
-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts
-Wenum-compare (in C/Objc; this is on by default in C++) -Wimplicit-int (C and
Objective-C only) -Wimplicit-function-declaration (C and Objective-C only)
-Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding)
-Wmissing-braces -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type
-Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing
-Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas
-Wunused-function -Wunused-label -Wunused-value -Wunused-variable
-Wvolatile-register-var
-Wextra 包含:
-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C only) -Wold-style-declaration (C only) -Woverride-init
-Wsign-compare -Wtype-limits -Wuninitialized -Wunused-parameter (only with -Wunused
or -Wall) -Wunused-but-set-parameter (only with -Wunused or -Wall)
还有很多警告你必须明确打开。
E.g。对于我们使用的C代码:
-Wall -Wextra -Waggregate-return -Wcast-align -Wcast-qual -Wdisabled-optimization -Wdiv-by-zero -Wendif-labels -Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat- y2k -Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wjump-misses-init -Wlogical-op -Werror = missing-braces -Wmissing-declarations -Wno-missing-format-attribute -Wmissing-include-dirs - Wmultichar -Wpacked -Wpointer-arith -Wreturn-type -Wsequence-point -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing = 2 -Wswitch -Wswitch-default -Werror = undef -Wno-unused -Wvariadic-macros -Wwrite- strings -Wc ++ - compat -Werror = declaration-after-statement -Werror = implicit-function-declaration -Wmissing-prototypes -Werror = nested-externs -Werror = old-style-definition -Werror = strict-prototypes
或仅使用https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html
的警告集答案 2 :(得分:15)
可悲的是,没有一个答案引用了手册中实际相关的部分,这真的让它变为现实:
这将启用一些用户考虑的有关构造的所有警告 有问题,容易避免(或修改以防止警告), 甚至与宏一起使用。
[...]
请注意
-Wall
不暗示某些警告标志。他们中的一些人警告说 关于用户通常不认为有问题的构造,但是哪些 偶尔你可能想检查一下;其他人警告那些建筑 在某些情况下是必要的或难以避免的,并且没有简单的方法 修改代码以禁止警告。其中一些是-Wextra
启用的 但其中许多必须单独启用。
埃尔戈:
-Wall
不表示“所有警告”。底线,它是你应该设置的绝对最小警告。虽然-Wall -Wextra
更好,但它仍然没有利用编译器可以为您做的所有错误检查。
就我个人而言,我不会低于-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
。我当前所有的项目实际上都使用了比这更长的警告列表(没有触发任何警告)。我会检查每个主要版本的手册以获取新选项。编译器是你的朋友。使用它可以为您提供的任何诊断。
答案 3 :(得分:6)
它可以使gcc编写者在源代码中轻松避免被认为有用的警告和。还有-W(在较新版本中的-Wextra)被认为是有用的,但是对于哪些解决误报可能很困难或导致笨拙的代码。
gcc还有一堆其他警告,通常不太有用。见http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options
答案 4 :(得分:1)
enables most warning messages
。
如果您使用g++ --help=warnings
,则可以了解更多信息。
答案 5 :(得分:0)
它可以启用所有警告。 (读作“全部警告”)
答案 6 :(得分:-1)
显示所有警告。我建议也使用-pedantic
来警告一些不符合代码的部分。