Microchip Technology SW006023-2 데이터 시트
Compiler Command Line Driver
2012 Microchip Technology Inc.
DS51686E-page 69
TABLE 3-9:
WARNING AND ERROR OPTIONS NOT IMPLIED BY ALL
WARNINGS
WARNINGS
Option
Definition
-W
Print extra warning messages for these events:
• A nonvolatile automatic variable might be changed by a
• 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
to setjmp. It cannot know where longjmp 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, because longjmp
cannot in fact be called at the place that would cause a
problem.
optimizing compilation. The compiler sees only the calls
to setjmp. It cannot know where longjmp 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, because longjmp
cannot in fact be called at the place that would cause a
problem.
• A function could exit both via return
value;
and
return;
. Completing the function body without passing
any return statement is treated as return;.
• 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] causes a
warning, but x[(void)i,j] does not.
the warning, cast the unused expression to void. For
example, an expression such as x[i,j] causes a
warning, but x[(void)i,j] does not.
• An unsigned value is compared against zero with < or <=.
• A comparison like x<=y<=z appears, This is equivalent
• 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.
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.
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 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:
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:
such a warning, because x.h would be implicitly
initialized to zero:
struct s { int f, g, h; };
struct s x = { 3, 4 };
-Waggregate-return
Warn if any functions that return structures or unions are
defined or called.
defined or called.
-Wbad-function-cast
Warn whenever a function call is cast to a non-matching type.
For example, warn if
For example, warn if
int
foof()
is cast to anything *.
-Wcast-align
Warn whenever a pointer is cast, such that the required
alignment of the target is increased. For example, warn if a
char *
alignment of the target is increased. For example, warn if a
char *
is cast to an
int
*
.
-Wcast-qual
Warn whenever a pointer is cast, so as to remove a type
qualifier from the target type. For example, warn if a
const char *
qualifier from the target type. For example, warn if a
const char *
is cast to an ordinary char *.