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

C++G++

C++ Problem Overview


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

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

C++ Solutions


Solution 1 - C++

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.

Solution 2 - C++

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

or just the set of warnings with https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html

Solution 3 - C++

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.

Solution 4 - C++

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

Solution 5 - C++

It enables most warning messages.

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

Solution 6 - C++

It enables all warnings. (reads as "Warning All")

Solution 7 - C++

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionstevenView Question on Stackoverflow
Solution 1 - C++TylerView Answer on Stackoverflow
Solution 2 - C++rurbanView Answer on Stackoverflow
Solution 3 - C++DevSolarView Answer on Stackoverflow
Solution 4 - C++AProgrammerView Answer on Stackoverflow
Solution 5 - C++YuvalView Answer on Stackoverflow
Solution 6 - C++Bjorn JView Answer on Stackoverflow
Solution 7 - C++Kirill V. LyadvinskyView Answer on Stackoverflow