6.6.4.3 The -W Option
Use the -W
command line option to print extra warning
messages for these events:
- A nonvolatile automatic variable might be changed by a call to
longjmp
. These warnings are possible only in optimizing compilation. The compiler sees only the calls tosetjmp
. It cannot know wherelongjmp
will be called; in fact, a signal handler could call it at any point in the code. As a result, a warning may be generated even when there is in fact no problem, becauselongjmp
cannot in fact be called at the place that would cause a problem. - A function could exit both via
return value;
andreturn;
. Completing the function body without passing any return statement is treated asreturn;
. - An expression-statement or the left-hand side of a comma expression
contains no side effects. To suppress the warning, cast the unused expression to
void. For example, an expression such as
x[i,j]
will cause a warning, butx[(void)i,j]
will not. - An unsigned value is compared against zero with
<
or<=
. - A comparison like
x<=y<=z
appears; this is equivalent to(x<=y ? 1 : 0) <= z
, which is a different interpretation from that of ordinary mathematical notation. - Storage-class specifiers like
static
are not the first things in a declaration. According to the C Standard, this usage is obsolescent. - If
-Wall
or-Wunused
is also specified, warn about unused arguments. - A comparison between signed and unsigned values could produce an
incorrect result when the signed value is converted to unsigned. (But don’t warn if
-Wno-sign-compare
is also specified.) - An aggregate has a partly bracketed initializer. For example, the
following code would evoke such a warning, because braces are missing around the
initializer for
x.h
:struct s { int f, g; }; struct t { struct s h; int i; }; struct t x = { 1, 2, 3 };
- An aggregate has an initializer that does not initialize all
members. For example, the following code would cause such a warning, because
x.h
would be implicitly initialized to zero:struct s { int f, g, h; };
struct s x = { 3, 4 };