Home » C++ » What does “-Wall” in “g++ -Wall test.cpp -o test” do?

What does “-Wall” in “g++ -Wall test.cpp -o test” do?

Posted by: admin November 30, 2017 Leave a comment

Questions:

-o changes the output filename (I found that using –help)

But I can’t find out what -Wall does?

Answers:

It’s short for “warn all” — it turns on (almost) all the warnings that g++ can tell you about. Typically a good idea, especially if you’re a beginner, because understanding and fixing those warnings can help you fix lots of different kinds of problems in your code.

Questions:
Answers:

See man gcc.

-Wall turns on these warnings:

-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 contains:

-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)

There are many more warnings which you have to turn on explicitly.

E.g. for our C code we use:

-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

Questions:
Answers:

Sadly enough none of the answers is quoting the actually relevant part of manual, which really brings it to a point:

This enables all the warnings about constructions that some users consider
questionable, and that are easy to avoid (or modify to prevent the warning),
even in conjunction with macros.

[…]

Note that some warning flags are not implied by -Wall. Some of them warn
about constructions that users generally do not consider questionable, but which
occasionally you might wish to check for; others warn about constructions that
are necessary or hard to avoid in some cases, and there is no simple way to
modify the code to suppress the warning. Some of them are enabled by -Wextra
but many of them must be enabled individually.

Ergo:

  • -Wall does not mean “all warnings”.
  • It does also not mean “(almost) all”, not by a long shot.
  • It does mean a set of individual options that is bound to change.

Bottom line, it is about the absolute minimum of warnings you should set. While -Wall -Wextra is better, it’s still not making use of all the error checking your compiler can do for you.


Personally I wouldn’t go for less than -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual. All my current projects actually use a list of warnings longer than that (without triggering any of them). And I do check the manual on every major release for new options. The compiler is your friend. Use whatever diagnostics it can offer you.

Questions:
Answers:

It enables warnings which are deemed useful and easy to avoid at the source by gcc writers. There is also -W (-Wextra in newer releases) which are deemed useful but for which work-arounding false positives can be difficult or result in clumsy code.

gcc has also a bunch of other warnings, generally less useful. See http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options

Questions:
Answers:

It enables all warnings. (reads as “Warning All”)

Questions:
Answers:

It enables most warning messages.

You can find out more if you use g++ --help=warnings.

Questions:
Answers:

It shows all warnings. I’d recommend also use -pedantic to warn about some non-conformant parts of code.

Leave a Reply

Your email address will not be published. Required fields are marked *