-->
Page 158
variables you declared may not exist at all; flow of control may briefly move where you did not expect it; some statements may not be executed because they compute constant results or their values were already at hand; some statements may execute in different places because they were moved out of loops. | |
Nevertheless, it proves possible to debug optimized output. This makes it reasonable to use the optimizer for programs that might have bugs. | |
_Idir | Append directory dir to the list of directories searched for include files. |
_Ldir | Add directory dir to the list of directories to be searched for _l. |
_llibrary | Use the library named library when linking. (C++ programs often require _lg++ for successful linking.) |
_nostdinc | Do not search the standard system directories for header files. Only the directories you have specified with _I options (and the current directory, if appropriate) are searched. |
_nostdinc++ | Do not search for header files in the standard directories specific to C++, but do still search the other standard directories. (This option is used when building libg++.) |
_O | Optimize. Optimizing compilation takes somewhat more time, and a lot more memory for a large function. |
_o file | Place output in file file. |
_S | Stop after the stage of compilation proper; do not assemble. The output is an assembler code file for each nonassembler input file specified. |
_traditional | Attempt to support some aspects of traditional C compilers. Specifically, for both C and C++ programs: |
In the preprocessor, comments convert to nothing at all, rather than to a space. This allows traditional token concatenation. | |
In the preprocessor, macro arguments are recognized within string constants in a macro definition (and their values are stringified, though without additional quote marks, when they appear in such a context). The preprocessor always considers a string constant to end at a newline. | |
The preprocessor does not predefine the macro STDC when you use _traditional, but still predefines GNUC (since the GNU extensions indicated by GNUC are not affected by _traditional). If you need to write header files that work differently depending on whether _traditional is in use, by testing both of these predefined macros you can distinguish four situations: GNU C, traditional GNU C, other ANSI C compilers, and other old C compilers. | |
In the preprocessor, comments convert to nothing at all, rather than to a space. This allows traditional token concatenation. | |
String "constants" are not necessarily constant; they are stored in writable space, and identical looking constants are allocated separately. For C++ programs only (not C), _traditional has one additional effect: assignment to this is permitted. This is the same as the effect of _fthis_is_variable. | |
_Umacro | Undefine macro macro. |
_Wall | Issue warnings for conditions that pertain to usage that we recommend avoiding and that we believe is easy to avoid, even in conjunction with macros. |
_Wenum_clash | Warn when converting between different enumeration types. |
_Woverloaded_virtual | In a derived class, the definitions of virtual functions must match the type signature of a virtual function declared in the base class. Use this option to request warnings when a derived class declares a function that may be an erroneous attempt to define a virtual function; that is, warn when a function with the same name as a virtual function in the base class, but with a type signature that doesn't match any virtual functions from the base class. |