Next: Compiling multiple source files, Previous: Compiling a simple C program, Up: Compiling a C program [Contents][Index]
As mentioned above, compiler warnings are an essential aid when
programming in C and C++. To demonstrate this, the program below
contains a subtle error: it uses the function printf
incorrectly,
by specifying a floating-point format ‘%f’ for an integer value:
#include <stdio.h> int main (void) { printf ("Two plus two is %f\n", 4); return 0; }
This error is not obvious at first sight, but can be detected by the compiler if the warning option -Wall has been enabled.
Compiling the program above, bad.c, with the warning option -Wall produces the following message:
$ gcc -Wall bad.c -o bad bad.c: In function `main': bad.c:6: warning: double format, different type arg (arg 2)
This indicates that a format string has been used incorrectly in the file bad.c at line 6. The messages produced by GCC always have the form file:line-number:message. The compiler distinguishes between error messages, which prevent successful compilation, and warning messages which indicate possible problems (but do not stop the program from compiling).
In this case, the correct format specifier should be ‘%d’
for an integer argument. The allowed format specifiers for
printf
can be found in any general book on C, such as the
GNU C Library Reference Manual (see Further reading).
Without the warning option -Wall the program appears to compile cleanly, but produces incorrect results:
$ gcc bad.c -o bad
$ ./bad
Two plus two is 2.585495 (incorrect output)
The incorrect format specifier causes the output to be corrupted,
because the function printf
is passed an integer instead of a
floating-point number. Integers and floating-point numbers are stored
in different formats in memory, and generally occupy different numbers
of bytes, leading to a spurious result. The actual output shown above
may differ, depending on the specific platform and environment.
Clearly, it is very dangerous to develop a program without checking for compiler warnings. If there are any functions which are not used correctly they can cause the program to crash or produce incorrect results. Turning on the compiler warning option -Wall will catch many of the commonest errors which occur in C programming.
Next: Compiling multiple source files, Previous: Compiling a simple C program, Up: Compiling a C program [Contents][Index]