“g ++ -Wall test.cpp -o test”中的“-Wall”是做什么的?

时间:2010-03-09 09:53:07

标签: c++ g++

-o更改输出文件名(我发现使用--help)

但是我找不到-Wall做了什么?

7 个答案:

答案 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来警告一些不符合代码的部分。