cpp.texi: Revised and brought up to date.
authorZack Weinberg <zack@gcc.gnu.org>
Fri, 15 Jun 2001 07:25:51 +0000 (07:25 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Fri, 15 Jun 2001 07:25:51 +0000 (07:25 +0000)
* doc/cpp.texi: Revised and brought up to date.
* doc/cpp.1: Regenerate.

[[Split portion of a mixed commit.]]

From-SVN: r43395.2

gcc/doc/cpp.1

index f3e227e..291ef34 100644 (file)
@@ -1,5 +1,5 @@
-.\" Automatically generated by Pod::Man version 1.1
-.\" Mon Feb 19 19:32:17 2001
+.\" Automatically generated by Pod::Man version 1.16
+.\" Fri Jun 15 00:04:02 2001
 .\"
 .\" Standard preamble:
 .\" ======================================================================
 .\" ======================================================================
 .\"
 .IX Title "CPP 1"
-.TH CPP 1 "gcc-3.1" "2001-02-19" "GNU"
+.TH CPP 1 "gcc-3.1" "2001-06-15" "GNU"
 .UC
 .SH "NAME"
 cpp \- The C Preprocessor
 .SH "SYNOPSIS"
 .IX Header "SYNOPSIS"
-cpp [\fB\-P\fR] [\fB\-C\fR] [\fB\-gcc\fR] [\fB\-traditional\fR]
-    [\fB\-undef\fR] [\fB\-trigraphs\fR] [\fB\-pedantic\fR]
-    [\fB\-W\fR\fIwarn\fR...] [\fB\-I\fR\fIdir\fR...]
-    [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
-    [\fB\-A\fR\fIpredicate\fR(\fIanswer\fR)]
-    [\fB\-M\fR|\fB\-MM\fR][\fB\-MG\fR][\fB\-MF\fR\fIfilename\fR]
-    [\fB\-MP\fR][\fB\-MQ\fR\fItarget\fR...][\fB\-MT\fR\fItarget\fR...]
+cpp [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
+    [\fB\-I\fR\fIdir\fR...] [\fB\-W\fR\fIwarn\fR...]
+    [\fB\-M\fR|\fB\-MM\fR] [\fB\-MG\fR] [\fB\-MF\fR \fIfilename\fR]
+    [\fB\-MP\fR] [\fB\-MQ\fR \fItarget\fR...] [\fB\-MT\fR \fItarget\fR...]
     [\fB\-x\fR \fIlanguage\fR] [\fB\-std=\fR\fIstandard\fR]
     \fIinfile\fR \fIoutfile\fR
 .PP
 Only the most useful options are listed here; see below for the remainder.
 .SH "DESCRIPTION"
 .IX Header "DESCRIPTION"
-The C preprocessor is a \fImacro processor\fR that is used automatically
-by the C compiler to transform your program before actual compilation.
-It is called a macro processor because it allows you to define
-\&\fImacros\fR, which are brief abbreviations for longer constructs.
+The C preprocessor, often known as \fIcpp\fR, is a \fImacro processor\fR
+that is used automatically by the C compiler to transform your program
+before compilation.  It is called a macro processor because it allows
+you to define \fImacros\fR, which are brief abbreviations for longer
+constructs.
 .PP
-The C preprocessor is intended only for macro processing of C, \*(C+ and
-Objective C source files.  For macro processing of other files, you are
-strongly encouraged to use alternatives like M4, which will likely give
-you better results and avoid many problems.  For example, normally the C
-preprocessor does not preserve arbitrary whitespace verbatim, but
-instead replaces each sequence with a single space.
+The C preprocessor is intended to be used only with C, \*(C+, and
+Objective C source code.  In the past, it has been abused as a general
+text processor.  It will choke on input which does not obey C's lexical
+rules.  For example, apostrophes will be interpreted as the beginning of
+character constants, and cause errors.  Also, you cannot rely on it
+preserving characteristics of the input which are not significant to
+C-family languages.  If a Makefile is preprocessed, all the hard tabs
+will be removed, and the Makefile will not work.
 .PP
-For use on C-like source files, the C preprocessor provides four
-separate facilities that you can use as you see fit:
-.Ip "\(bu" 4
-Inclusion of header files.  These are files of declarations that can be
-substituted into your program.
-.Ip "\(bu" 4
-Macro expansion.  You can define \fImacros\fR, which are abbreviations
-for arbitrary fragments of C code, and then the C preprocessor will
-replace the macros with their definitions throughout the program.
-.Ip "\(bu" 4
-Conditional compilation.  Using special preprocessing directives, you
-can include or exclude parts of the program according to various
-conditions.
-.Ip "\(bu" 4
-Line control.  If you use a program to combine or rearrange source files
-into an intermediate file which is then compiled, you can use line
-control to inform the compiler of where each source line originally came
-from.
+Having said that, you can often get away with using cpp on things which
+are not C.  Other Algol-ish programming languages are often safe
+(Pascal, Ada, etc.) So is assembly, with caution.  \fB\-traditional\fR
+mode preserves more white space, and is otherwise more permissive.  Many
+of the problems can be avoided by writing C or \*(C+ style comments
+instead of native language comments, and keeping macros simple.
+.PP
+Wherever possible, you should use a preprocessor geared to the language
+you are writing in.  Modern versions of the \s-1GNU\s0 assembler have macro
+facilities.  Most high level programming languages have their own
+conditional compilation and inclusion mechanism.  If all else fails,
+try a true general text processor, such as \f(CW@docref\fR{M4}.
 .PP
 C preprocessors vary in some details.  This manual discusses the \s-1GNU\s0 C
 preprocessor, which provides a small superset of the features of \s-1ISO\s0
-Standard C.
-.PP
-In its default mode, the \s-1GNU\s0 C preprocessor does not do a few things
-required by the standard.  These are features which are rarely, if ever,
-used, and may cause surprising changes to the meaning of a program which
-does not expect them.  To get strict \s-1ISO\s0 Standard C, you should use the
-\&\fB\-std=c89\fR or \fB\-std=c99\fR options, depending on which version
-of the standard you want.  To get all the mandatory diagnostics, you
-must also use \fB\-pedantic\fR.  
+Standard C.  In its default mode, the \s-1GNU\s0 C preprocessor does not do a
+few things required by the standard.  These are features which are
+rarely, if ever, used, and may cause surprising changes to the meaning
+of a program which does not expect them.  To get strict \s-1ISO\s0 Standard C,
+you should use the \fB\-std=c89\fR or \fB\-std=c99\fR options, depending
+on which version of the standard you want.  To get all the mandatory
+diagnostics, you must also use \fB\-pedantic\fR.  
 .SH "OPTIONS"
 .IX Header "OPTIONS"
 The C preprocessor expects two file names as arguments, \fIinfile\fR and
@@ -211,353 +203,161 @@ Either \fIinfile\fR or \fIoutfile\fR may be \fB-\fR, which as
 means to write to standard output.  Also, if either file is omitted, it
 means the same as if \fB-\fR had been specified for that file.
 .PP
-Here is a table of command options accepted by the C preprocessor.
-These options can also be given when compiling a C program; they are
-passed along automatically to the preprocessor when it is invoked by the
-compiler.
-.Ip "\fB\-P\fR" 4
-.IX Item "-P"
-Inhibit generation of \fB#\fR\-lines with line-number information in the
-output from the preprocessor.  This might be useful when running the
-preprocessor on something that is not C code and will be sent to a
-program which might be confused by the \fB#\fR\-lines.  
-.Ip "\fB\-C\fR" 4
-.IX Item "-C"
-Do not discard comments.  All comments are passed through to the output
-file, except for comments in processed directives, which are deleted
-along with the directive.  Comments appearing in the expansion list of a
-macro will be preserved, and appear in place wherever the macro is
-invoked.
-.Sp
-You should be prepared for side effects when using \fB\-C\fR; it causes
-the preprocessor to treat comments as tokens in their own right.  For
-example, macro redefinitions that were trivial when comments were
-replaced by a single space might become significant when comments are
-retained.  Also, comments appearing at the start of what would be a
-directive line have the effect of turning that line into an ordinary
-source line, since the first token on the line is no longer a \fB#\fR.
-.Ip "\fB\-traditional\fR" 4
-.IX Item "-traditional"
-Try to imitate the behavior of old-fashioned C, as opposed to \s-1ISO\s0 C.
-.RS 4
-.Ip "\(bu" 4
-Traditional macro expansion pays no attention to single-quote or
-double-quote characters; macro argument symbols are replaced by the
-argument values even when they appear within apparent string or
-character constants.
-.Ip "\(bu" 4
-Traditionally, it is permissible for a macro expansion to end in the
-middle of a string or character constant.  The constant continues into
-the text surrounding the macro call.
-.Ip "\(bu" 4
-However, traditionally the end of the line terminates a string or
-character constant, with no error.
-.Ip "\(bu" 4
-In traditional C, a comment is equivalent to no text at all.  (In \s-1ISO\s0
-C, a comment counts as whitespace.)
-.Ip "\(bu" 4
-Traditional C does not have the concept of a ``preprocessing number''.
-It considers \fB1.0e+4\fR to be three tokens: \fB1.0e\fR, \fB+\fR,
-and \fB4\fR.
-.Ip "\(bu" 4
-A macro is not suppressed within its own definition, in traditional C.
-Thus, any macro that is used recursively inevitably causes an error.
-.Ip "\(bu" 4
-The character \fB#\fR has no special meaning within a macro definition
-in traditional C.
-.Ip "\(bu" 4
-In traditional C, the text at the end of a macro expansion can run
-together with the text after the macro call, to produce a single token.
-(This is impossible in \s-1ISO\s0 C.)
-.Ip "\(bu" 4
-None of the \s-1GNU\s0 extensions to the preprocessor are available in
-\&\fB\-traditional\fR mode.
-.RE
-.RS 4
-.Sp
-Use the \fB\-traditional\fR option when preprocessing Fortran code, so
-that single-quotes and double-quotes within Fortran comment lines (which
-are generally not recognized as such by the preprocessor) do not cause
-diagnostics about unterminated character or string constants.
-.Sp
-However, this option does not prevent diagnostics about unterminated
-comments when a C-style comment appears to start, but not end, within
-Fortran-style commentary.
-.Sp
-So, the following Fortran comment lines are accepted with
-\&\fB\-traditional\fR:
-.Sp
-.Vb 3
-\&        C This isn't an unterminated character constant
-\&        C Neither is "20000000000, an octal constant
-\&        C in some dialects of Fortran
-.Ve
-However, this type of comment line will likely produce a diagnostic, or
-at least unexpected output from the preprocessor, due to the
-unterminated comment:
+All single-letter options which take an argument may have that argument
+appear immediately after the option letter, or with a space between
+option and argument:  \fB\-Ifoo\fR and \fB\-I foo\fR have the same
+effect.  Long options that take arguments require a space between option
+and argument.
+.if n .Ip "\f(CW""\-D \f(CIname\f(CW""\fR" 4
+.el .Ip "\f(CW\-D \f(CIname\f(CW\fR" 4
+.IX Item "-D name"
+Predefine \fIname\fR as a macro, with definition \fB1\fR.
+.if n .Ip "\f(CW""\-D \f(CIname\f(CW=\f(CIdefinition\f(CW""\fR" 4
+.el .Ip "\f(CW\-D \f(CIname\f(CW=\f(CIdefinition\f(CW\fR" 4
+.IX Item "-D name=definition"
+Predefine \fIname\fR as a macro, with definition \fIdefinition\fR.
+There are no restrictions on the contents of \fIdefinition\fR, but if
+you are invoking the preprocessor from a shell or shell-like program you
+may need to use the shell's quoting syntax to protect characters such as
+spaces that have a meaning in the shell syntax.  If you use more than
+one \fB\-D\fR for the same \fIname\fR, the rightmost definition takes
+effect.
 .Sp
-.Vb 2
-\&        C Some Fortran compilers accept /* as starting
-\&        C an inline comment.
-.Ve
-Note that \f(CW\*(C`g77\*(C'\fR automatically supplies the \fB\-traditional\fR
-option when it invokes the preprocessor.  However, a future version of
-\&\f(CW\*(C`g77\*(C'\fR might use a different, more-Fortran-aware preprocessor in
-place of \f(CW\*(C`cpp\*(C'\fR.
-.RE
-.Ip "\fB\-trigraphs\fR" 4
-.IX Item "-trigraphs"
-Process \s-1ISO\s0 standard trigraph sequences.  These are three-character
-sequences, all starting with \fB??\fR, that are defined by \s-1ISO\s0 C to
-stand for single characters.  For example, \fB??/\fR stands for
-\&\fB\e\fR, so \fB'??/n'\fR is a character constant for a newline.  By
-default, \s-1GCC\s0 ignores trigraphs, but in standard-conforming modes it
-converts them.  See the \fB\-std\fR option.
+If you wish to define a function-like macro on the command line, write
+its argument list with surrounding parentheses before the equals sign
+(if any).  Parentheses are meaningful to most shells, so you will need
+to quote the option.  With \fBsh\fR and \fBcsh\fR,
+\&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
+.if n .Ip "\f(CW""\-U \f(CIname\f(CW""\fR" 4
+.el .Ip "\f(CW\-U \f(CIname\f(CW\fR" 4
+.IX Item "-U name"
+Cancel any previous definition of \fIname\fR, either built in or
+provided with a \fB\-D\fR option.
 .Sp
-The nine trigraph sequences are
-.RS 4
-.Ip "\fB??(\fR" 4
-.IX Item "??("
--> \fB[\fR
-.Ip "\fB??)\fR" 4
-.IX Item "??)"
--> \fB]\fR
-.Ip "\fB??<\fR" 4
-.IX Item "??<"
--> \fB{\fR
-.Ip "\fB??>\fR" 4
-.IX Item "??>"
--> \fB}\fR
-.Ip "\fB??=\fR" 4
-.IX Item "??="
--> \fB#\fR
-.Ip "\fB??/\fR" 4
-.IX Item "??/"
--> \fB\e\fR
-.Ip "\fB??'\fR" 4
-.IX Item "??'"
--> \fB^\fR
-.Ip "\fB??!\fR" 4
-.IX Item "??!"
--> \fB|\fR
-.Ip "\fB??-\fR" 4
-.IX Item "??-"
--> \fB~\fR
-.RE
-.RS 4
+All \fB\-imacros\fR \fIfile\fR and \fB\-include\fR \fIfile\fR options
+are processed after all \fB\-D\fR and \fB\-U\fR options.
+.if n .Ip "\f(CW""\-undef""\fR" 4
+.el .Ip "\f(CW\-undef\fR" 4
+.IX Item "-undef"
+Do not predefine any system-specific macros.  The common predefined
+macros remain defined.
+.if n .Ip "\f(CW""\-I \f(CIdir\f(CW""\fR" 4
+.el .Ip "\f(CW\-I \f(CIdir\f(CW\fR" 4
+.IX Item "-I dir"
+Add the directory \fIdir\fR to the list of directories to be searched
+for header files.    Directories named by \fB\-I\fR
+are searched before the standard system include directories.
 .Sp
-Trigraph support is not popular, so many compilers do not implement it
-properly.  Portable code should not rely on trigraphs being either
-converted or ignored.
-.RE
-.Ip "\fB\-pedantic\fR" 4
-.IX Item "-pedantic"
-Issue warnings required by the \s-1ISO\s0 C standard in certain cases such
-as when text other than a comment follows \fB#else\fR or \fB#endif\fR.
-.Ip "\fB\-pedantic-errors\fR" 4
-.IX Item "-pedantic-errors"
-Like \fB\-pedantic\fR, except that errors are produced rather than
-warnings.
-.Ip "\fB\-Wcomment\fR" 4
+It is dangerous to specify a standard system include directory in an
+\&\fB\-I\fR option.  This defeats the special treatment of system
+headers.  It can also defeat the repairs to
+buggy system headers which \s-1GCC\s0 makes when it is installed.
+.if n .Ip "\f(CW""\-o \f(CIfile\f(CW""\fR" 4
+.el .Ip "\f(CW\-o \f(CIfile\f(CW\fR" 4
+.IX Item "-o file"
+Write output to \fIfile\fR.  This is the same as specifying \fIfile\fR
+as the second non-option argument to \fBcpp\fR.  \fBgcc\fR has a
+different interpretation of a second non-option argument, so you must
+use \fB\-o\fR to specify the output file.
+.if n .Ip "\f(CW""\-Wall""\fR" 4
+.el .Ip "\f(CW\-Wall\fR" 4
+.IX Item "-Wall"
+Turns on all optional warnings which are desirable for normal code.  At
+present this is \fB\-Wcomment\fR and \fB\-Wtrigraphs\fR.  Note that
+many of the preprocessor's warnings are on by default and have no
+options to control them.
+.if n .Ip "\f(CW""\-Wcomment""\fR" 4
+.el .Ip "\f(CW\-Wcomment\fR" 4
 .IX Item "-Wcomment"
 .PD 0
-.Ip "\fB\-Wcomments\fR" 4
+.if n .Ip "\f(CW""\-Wcomments""\fR" 4
+.el .Ip "\f(CW\-Wcomments\fR" 4
 .IX Item "-Wcomments"
 .PD
-(Both forms have the same effect).
 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
 comment, or whenever a backslash-newline appears in a \fB//\fR comment.
-.Ip "\fB\-Wtrigraphs\fR" 4
+(Both forms have the same effect.)
+.if n .Ip "\f(CW""\-Wtrigraphs""\fR" 4
+.el .Ip "\f(CW\-Wtrigraphs\fR" 4
 .IX Item "-Wtrigraphs"
 Warn if any trigraphs are encountered.  This option used to take effect
 only if \fB\-trigraphs\fR was also specified, but now works
 independently.  Warnings are not given for trigraphs within comments, as
-we feel this is obnoxious.
-.Ip "\fB\-Wwhite-space\fR" 4
-.IX Item "-Wwhite-space"
-Warn about possible white space confusion, e.g. white space between a
-backslash and a newline.
-.Ip "\fB\-Wall\fR" 4
-.IX Item "-Wall"
-Requests \fB\-Wcomment\fR, \fB\-Wtrigraphs\fR, and \fB\-Wwhite-space\fR
-(but not \fB\-Wtraditional\fR or \fB\-Wundef\fR).
-.Ip "\fB\-Wtraditional\fR" 4
+they do not affect the meaning of the program.
+.if n .Ip "\f(CW""\-Wtraditional""\fR" 4
+.el .Ip "\f(CW\-Wtraditional\fR" 4
 .IX Item "-Wtraditional"
 Warn about certain constructs that behave differently in traditional and
-\&\s-1ISO\s0 C.
-.RS 4
-.Ip "\(bu" 4
-Macro parameters that appear within string literals in the macro body.
-In traditional C macro replacement takes place within string literals,
-but does not in \s-1ISO\s0 C.
-.Ip "\(bu" 4
-In traditional C, some preprocessor directives did not exist.
-Traditional preprocessors would only consider a line to be a directive
-if the \fB#\fR appeared in column 1 on the line.  Therefore
-\&\fB\-Wtraditional\fR warns about directives that traditional C
-understands but would ignore because the \fB#\fR does not appear as the
-first character on the line.  It also suggests you hide directives like
-\&\fB#pragma\fR not understood by traditional C by indenting them.  Some
-traditional implementations would not recognise \fB#elif\fR, so it
-suggests avoiding it altogether.
-.Ip "\(bu" 4
-A function-like macro that appears without arguments.
-.Ip "\(bu" 4
-The unary plus operator.
-.Ip "\(bu" 4
-The `U' integer constant suffix.  (Traditonal C does support the `L'
-suffix on integer constants.)  Note, these suffixes appear in macros
-defined in the system headers of most modern systems, e.g. the _MIN/_MAX
-macros in limits.h.  Use of these macros can lead to spurious warnings
-as they do not necessarily reflect whether the code in question is any
-less portable to traditional C given that suitable backup definitions
-are provided.
-.RE
-.RS 4
-.RE
-.Ip "\fB\-Wundef\fR" 4
+\&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
+equivalent, and problematic constructs which should be avoided.
+.if n .Ip "\f(CW""\-Wimport""\fR" 4
+.el .Ip "\f(CW\-Wimport\fR" 4
+.IX Item "-Wimport"
+Warn the first time \fB#import\fR is used.
+.if n .Ip "\f(CW""\-Wundef""\fR" 4
+.el .Ip "\f(CW\-Wundef\fR" 4
 .IX Item "-Wundef"
-Warn if an undefined identifier is evaluated in an \fB#if\fR directive.
-.Ip "\fB\-I\fR \fIdirectory\fR" 4
-.IX Item "-I directory"
-Add the directory \fIdirectory\fR to the head of the list of
-directories to be searched for header files.
-This can be used to override a system header file, substituting your
-own version, since these directories are searched before the system
-header file directories.  If you use more than one \fB\-I\fR option,
-the directories are scanned in left-to-right order; the standard
-system directories come after.
-.Ip "\fB\-I-\fR" 4
-.IX Item "-I-"
-Any directories specified with \fB\-I\fR options before the \fB\-I-\fR
-option are searched only for the case of \fB#include "\fR\fIfile\fR\fB"\fR;
-they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR.
-.Sp
-If additional directories are specified with \fB\-I\fR options after
-the \fB\-I-\fR, these directories are searched for all \fB#include\fR
-directives.
-.Sp
-In addition, the \fB\-I-\fR option inhibits the use of the current
-directory as the first search directory for \fB#include "\fR\fIfile\fR\fB"\fR.
-Therefore, the current directory is searched only if it is requested
-explicitly with \fB\-I.\fR.  Specifying both \fB\-I-\fR and \fB\-I.\fR
-allows you to control precisely which directories are searched before
-the current one and which are searched after.
-.Ip "\fB\-nostdinc\fR" 4
-.IX Item "-nostdinc"
-Do not search the standard system directories for header files.
-Only the directories you have specified with \fB\-I\fR options
-(and the current directory, if appropriate) are searched.
-.Sp
-By using both \fB\-nostdinc\fR and \fB\-I-\fR, you can limit the include-file
-search path to only those directories you specify explicitly.
-.Ip "\fB\-nostdinc++\fR" 4
-.IX Item "-nostdinc++"
-Do not search for header files in the \*(C+\-specific standard directories,
-but do still search the other standard directories.  (This option is
-used when building the \*(C+ library.)
-.Ip "\fB\-remap\fR" 4
-.IX Item "-remap"
-When searching for a header file in a directory, remap file names if a
-file named \fIheader.gcc\fR exists in that directory.  This can be used
-to work around limitations of file systems with file name restrictions.
-The \fIheader.gcc\fR file should contain a series of lines with two
-tokens on each line: the first token is the name to map, and the second
-token is the actual name to use.
-.Ip "\fB\-D\fR \fIname\fR" 4
-.IX Item "-D name"
-Predefine \fIname\fR as a macro, with definition \fB1\fR.
-.Ip "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
-.IX Item "-D name=definition"
-Predefine \fIname\fR as a macro, with definition \fIdefinition\fR.
-There are no restrictions on the contents of \fIdefinition\fR, but if
-you are invoking the preprocessor from a shell or shell-like program you
-may need to use the shell's quoting syntax to protect characters such as
-spaces that have a meaning in the shell syntax.  If you use more than
-one \fB\-D\fR for the same \fIname\fR, the rightmost definition takes
-effect.
-.Sp
-Any \fB\-D\fR and \fB\-U\fR options on the command line are processed in
-order, and always before \fB\-imacros\fR \fIfile\fR, regardless of the
-order in which they are written.
-.Ip "\fB\-U\fR \fIname\fR" 4
-.IX Item "-U name"
-Do not predefine \fIname\fR.
-.Sp
-Any \fB\-D\fR and \fB\-U\fR options on the command line are processed in
-order, and always before \fB\-imacros\fR \fIfile\fR, regardless of the
-order in which they are written.
-.Ip "\fB\-undef\fR" 4
-.IX Item "-undef"
-Do not predefine any nonstandard macros.
-.Ip "\fB\-gcc\fR" 4
-.IX Item "-gcc"
-Define the macros \fI_\|_GNUC_\|_\fR, \fI_\|_GNUC_MINOR_\|_\fR and
-\&\fI_\|_GNUC_PATCHLEVEL_\|_\fR. These are defined automatically when you use
-\&\fBgcc \-E\fR; you can turn them off in that case with \fB\-no-gcc\fR.
-.Ip "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
-.IX Item "-A predicate=answer"
-Make an assertion with the predicate \fIpredicate\fR and answer
-\&\fIanswer\fR.  This form is preferred to the older form \fB\-A\fR
-\&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because
-it does not use shell special characters.  
-.Ip "\fB\-A -\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
-.IX Item "-A -predicate=answer"
-Disable an assertion with the predicate \fIpredicate\fR and answer
-\&\fIanswer\fR.  Specifying no predicate, by \fB\-A-\fR or \fB\-A -\fR,
-disables all predefined assertions and all assertions preceding it on
-the command line; and also undefines all predefined macros and all
-macros preceding it on the command line.
-.Ip "\fB\-dM\fR" 4
-.IX Item "-dM"
-Instead of outputting the result of preprocessing, output a list of
-\&\fB#define\fR directives for all the macros defined during the
-execution of the preprocessor, including predefined macros.  This gives
-you a way of finding out what is predefined in your version of the
-preprocessor; assuming you have no file \fBfoo.h\fR, the command
-.Sp
-.Vb 1
-\&        touch foo.h; cpp -dM foo.h
-.Ve
-will show the values of any predefined macros.
-.Ip "\fB\-dD\fR" 4
-.IX Item "-dD"
-Like \fB\-dM\fR except in two respects: it does \fInot\fR include the
-predefined macros, and it outputs \fIboth\fR the \fB#define\fR
-directives and the result of preprocessing.  Both kinds of output go to
-the standard output file.
-.Ip "\fB\-dN\fR" 4
-.IX Item "-dN"
-Like \fB\-dD\fR, but emit only the macro names, not their expansions.
-.Ip "\fB\-dI\fR" 4
-.IX Item "-dI"
-Output \fB#include\fR directives in addition to the result of
-preprocessing.
-.Ip "\fB\-M\fR" 4
+Warn whenever an identifier which is not a macro is encountered in an
+\&\fB#if\fR directive, outside of \fBdefined\fR.  Such identifiers are
+replaced with zero.
+.if n .Ip "\f(CW""\-Werror""\fR" 4
+.el .Ip "\f(CW\-Werror\fR" 4
+.IX Item "-Werror"
+Make all warnings into hard errors.  Source code which triggers warnings
+will be rejected.
+.if n .Ip "\f(CW""\-Wsystem\-headers""\fR" 4
+.el .Ip "\f(CW\-Wsystem\-headers\fR" 4
+.IX Item "-Wsystem-headers"
+Issue warnings for code in system headers.  These are normally unhelpful
+in finding bugs in your own code, therefore suppressed.  If you are
+responsible for the system library, you may want to see them.
+.if n .Ip "\f(CW""\-w""\fR" 4
+.el .Ip "\f(CW\-w\fR" 4
+.IX Item "-w"
+Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
+.if n .Ip "\f(CW""\-pedantic""\fR" 4
+.el .Ip "\f(CW\-pedantic\fR" 4
+.IX Item "-pedantic"
+Issue all the mandatory diagnostics listed in the C standard.  Some of
+them are left out by default, since they trigger frequently on harmless
+code.
+.if n .Ip "\f(CW""\-pedantic\-errors""\fR" 4
+.el .Ip "\f(CW\-pedantic\-errors\fR" 4
+.IX Item "-pedantic-errors"
+Issue all the mandatory diagnostics, and make all mandatory diagnostics
+into errors.  This includes mandatory diagnostics that \s-1GCC\s0 issues
+without \fB\-pedantic\fR but treats as warnings.
+.if n .Ip "\f(CW""\-M""\fR" 4
+.el .Ip "\f(CW\-M\fR" 4
 .IX Item "-M"
 Instead of outputting the result of preprocessing, output a rule
 suitable for \f(CW\*(C`make\*(C'\fR describing the dependencies of the main source
 file.  The preprocessor outputs one \f(CW\*(C`make\*(C'\fR rule containing the
 object file name for that source file, a colon, and the names of all the
 included files, including those coming from \fB\-include\fR or
-\&\fB\-imacros\fR command line options.  Unless specified explicitly (with
-\&\fB\-MT\fR or \fB\-MQ\fR), the object file name consists of the basename
-of the source file with any suffix replaced with object file suffix.
-If there are many included files
-then the rule is split into several lines using \fB\e\fR\-newline.
-.Ip "\fB\-MM\fR" 4
+\&\fB\-imacros\fR command line options.
+.Sp
+Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
+object file name consists of the basename of the source file with any
+suffix replaced with object file suffix.  If there are many included
+files then the rule is split into several lines using \fB\e\fR\-newline.
+The rule has no commands.
+.if n .Ip "\f(CW""\-MM""\fR" 4
+.el .Ip "\f(CW\-MM\fR" 4
 .IX Item "-MM"
 Like \fB\-M\fR, but mention only the files included with \fB#include
 "\fR\fIfile\fR\fB"\fR or with \fB\-include\fR or \fB\-imacros\fR command line
 options.  System header files included with \fB#include <\fR\fIfile\fR\fB>\fR
 are omitted.
-.Ip "\fB\-MF\fR \fIfile\fR" 4
+.if n .Ip "\f(CW""\-MF \f(CIfile\f(CW""\fR" 4
+.el .Ip "\f(CW\-MF \f(CIfile\f(CW\fR" 4
 .IX Item "-MF file"
 When used with \fB\-M\fR or \fB\-MM\fR, specifies a file to write the
 dependencies to.  This allows the preprocessor to write the preprocessed
 file to stdout normally.  If no \fB\-MF\fR switch is given, \s-1CPP\s0 sends
 the rules to stdout and suppresses normal preprocessed output.
-.Ip "\fB\-MG\fR" 4
+.if n .Ip "\f(CW""\-MG""\fR" 4
+.el .Ip "\f(CW\-MG\fR" 4
 .IX Item "-MG"
 When used with \fB\-M\fR or \fB\-MM\fR, \fB\-MG\fR says to treat missing
 header files as generated files and assume they live in the same
@@ -565,94 +365,76 @@ directory as the source file.  It suppresses preprocessed output, as a
 missing header file is ordinarily an error.
 .Sp
 This feature is used in automatic updating of makefiles.
-.Ip "\fB\-MP\fR" 4
+.if n .Ip "\f(CW""\-MP""\fR" 4
+.el .Ip "\f(CW\-MP\fR" 4
 .IX Item "-MP"
 This option instructs \s-1CPP\s0 to add a phony target for each dependency
 other than the main file, causing each to depend on nothing.  These
 dummy rules work around errors \f(CW\*(C`make\*(C'\fR gives if you remove header
 files without updating the \f(CW\*(C`Makefile\*(C'\fR to match.
 .Sp
-This is typical output:\-
+This is typical output:
 .Sp
 .Vb 1
-\&        /tmp/test.o: /tmp/test.c /tmp/test.h
+\&        test.o: test.c test.h
 .Ve
 .Vb 1
-\&        /tmp/test.h:
+\&        test.h:
 .Ve
-.Ip "\fB\-MQ\fR \fItarget\fR" 4
-.IX Item "-MQ target"
-.PD 0
-.Ip "\fB\-MT\fR \fItarget\fR" 4
+.if n .Ip "\f(CW""\-MT \f(CItarget\f(CW""\fR" 4
+.el .Ip "\f(CW\-MT \f(CItarget\f(CW\fR" 4
 .IX Item "-MT target"
-.PD
-By default \s-1CPP\s0 uses the main file name, including any path, and appends
-the object suffix, normally ``.o'', to it to obtain the name of the
-target for dependency generation.  With \fB\-MT\fR you can specify a
-target yourself, overriding the default one.
+Change the target of the rule emitted by dependency generation.  By
+default \s-1CPP\s0 takes the name of the main input file, including any path,
+deletes any file suffix such as \fB.c\fR, and appends the platform's
+usual object suffix.  The result is the target.
 .Sp
-If you want multiple targets, you can specify them as a single argument
-to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
+An \fB\-MT\fR option will set the target to be exactly the string you
+specify.  If you want multiple targets, you can specify them as a single
+argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
 .Sp
-The targets you specify are output in the order they appear on the
-command line.  \fB\-MQ\fR is identical to \fB\-MT\fR, except that the
-target name is quoted for Make, but with \fB\-MT\fR it isn't.  For
-example, \-MT '$(objpfx)foo.o' gives
+For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
 .Sp
 .Vb 1
-\&        $(objpfx)foo.o: /tmp/foo.c
+\&        $(objpfx)foo.o: foo.c
 .Ve
-but \-MQ '$(objpfx)foo.o' gives
+.if n .Ip "\f(CW""\-MQ \f(CItarget\f(CW""\fR" 4
+.el .Ip "\f(CW\-MQ \f(CItarget\f(CW\fR" 4
+.IX Item "-MQ target"
+Same as \fB\-MT\fR, but it quotes any characters which are special to
+Make. \fB\-MQ\ '$(objpfx)foo.o'\fR gives
 .Sp
 .Vb 1
-\&        $$(objpfx)foo.o: /tmp/foo.c
+\&        $$(objpfx)foo.o: foo.c
 .Ve
 The default target is automatically quoted, as if it were given with
 \&\fB\-MQ\fR.
-.Ip "\fB\-H\fR" 4
-.IX Item "-H"
-Print the name of each header file used, in addition to other normal
-activities.
-.Ip "\fB\-imacros\fR \fIfile\fR" 4
-.IX Item "-imacros file"
-Process \fIfile\fR as input, discarding the resulting output, before
-processing the regular input file.  Because the output generated from
-\&\fIfile\fR is discarded, the only effect of \fB\-imacros\fR \fIfile\fR
-is to make the macros defined in \fIfile\fR available for use in the
-main input.
-.Ip "\fB\-include\fR \fIfile\fR" 4
-.IX Item "-include file"
-Process \fIfile\fR as input, and include all the resulting output,
-before processing the regular input file.  
-.Ip "\fB\-idirafter\fR \fIdir\fR" 4
-.IX Item "-idirafter dir"
-Add the directory \fIdir\fR to the second include path.  The directories
-on the second include path are searched when a header file is not found
-in any of the directories in the main include path (the one that
-\&\fB\-I\fR adds to).
-.Ip "\fB\-iprefix\fR \fIprefix\fR" 4
-.IX Item "-iprefix prefix"
-Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
-options.  If the prefix represents a directory, you should include the
-final \fB/\fR.
-.Ip "\fB\-iwithprefix\fR \fIdir\fR" 4
-.IX Item "-iwithprefix dir"
-Add a directory to the second include path.  The directory's name is
-made by concatenating \fIprefix\fR and \fIdir\fR, where \fIprefix\fR was
-specified previously with \fB\-iprefix\fR.
-.Ip "\fB\-isystem\fR \fIdir\fR" 4
-.IX Item "-isystem dir"
-Add a directory to the beginning of the second include path, marking it
-as a system directory, so that it gets the same special treatment as
-is applied to the standard system directories.  
-.Ip "\fB\-x c\fR" 4
+.if n .Ip "\f(CW""\-MD \f(CIfile\f(CW""\fR" 4
+.el .Ip "\f(CW\-MD \f(CIfile\f(CW\fR" 4
+.IX Item "-MD file"
+.PD 0
+.if n .Ip "\f(CW""\-MMD \f(CIfile\f(CW""\fR" 4
+.el .Ip "\f(CW\-MMD \f(CIfile\f(CW\fR" 4
+.IX Item "-MMD file"
+.PD
+\&\fB\-MD\fR \fIfile\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, and
+\&\fB\-MMD\fR \fIfile\fR is equivalent to \fB\-MM \-MF\fR \fIfile\fR.
+.Sp
+Due to limitations in the compiler driver, you must use these switches
+when you want to generate a dependency file as a side-effect of normal
+compilation.
+.if n .Ip "\f(CW""\-x c""\fR" 4
+.el .Ip "\f(CW\-x c\fR" 4
 .IX Item "-x c"
 .PD 0
-.Ip "\fB\-x c++\fR" 4
+.if n .Ip "\f(CW""\-x c++""\fR" 4
+.el .Ip "\f(CW\-x c++\fR" 4
 .IX Item "-x c++"
-.Ip "\fB\-x objective-c\fR" 4
+.if n .Ip "\f(CW""\-x objective\-c""\fR" 4
+.el .Ip "\f(CW\-x objective\-c\fR" 4
 .IX Item "-x objective-c"
-.Ip "\fB\-x assembler-with-cpp\fR" 4
+.if n .Ip "\f(CW""\-x assembler\-with\-cpp""\fR" 4
+.el .Ip "\f(CW\-x assembler\-with\-cpp\fR" 4
 .IX Item "-x assembler-with-cpp"
 .PD
 Specify the source language: C, \*(C+, Objective-C, or assembly.  This has
@@ -668,10 +450,12 @@ generic mode.
 which selected both the language and the standards conformance level.
 This option has been removed, because it conflicts with the \fB\-l\fR
 option.
-.Ip "\fB\-std=\fR\fIstandard\fR" 4
+.if n .Ip "\f(CW""\-std=\f(CIstandard\f(CW""\fR" 4
+.el .Ip "\f(CW\-std=\f(CIstandard\f(CW\fR" 4
 .IX Item "-std=standard"
 .PD 0
-.Ip "\fB\-ansi\fR" 4
+.if n .Ip "\f(CW""\-ansi""\fR" 4
+.el .Ip "\f(CW\-ansi\fR" 4
 .IX Item "-ansi"
 .PD
 Specify the standard to which the code should conform.  Currently cpp
@@ -729,18 +513,243 @@ The 1999 C standard plus \s-1GNU\s0 extensions.
 .RE
 .RS 4
 .RE
-.Ip "\fB\-ftabstop=NUMBER\fR" 4
-.IX Item "-ftabstop=NUMBER"
-Set the distance between tab stops.  This helps the preprocessor
-report correct column numbers in warnings or errors, even if tabs appear
-on the line.  Values less than 1 or greater than 100 are ignored.  The
-default is 8.
-.Ip "\fB\-$\fR" 4
+.if n .Ip "\f(CW""\-I\-""\fR" 4
+.el .Ip "\f(CW\-I\-\fR" 4
+.IX Item "-I-"
+Split the include path.  Any directories specified with \fB\-I\fR
+options before \fB\-I-\fR are searched only for headers requested with
+\&\fB#include\ "\f(BIfile\fB"\fR; they are not searched for
+\&\fB#include\ <\f(BIfile\fB>\fR.  If additional directories are
+specified with \fB\-I\fR options after the \fB\-I-\fR, those
+directories are searched for all \fB#include\fR directives.
+.Sp
+In addition, \fB\-I-\fR inhibits the use of the directory of the current
+file directory as the first search directory for \fB#include\ "\f(BIfile\fB"\fR.  
+.if n .Ip "\f(CW""\-nostdinc""\fR" 4
+.el .Ip "\f(CW\-nostdinc\fR" 4
+.IX Item "-nostdinc"
+Do not search the standard system directories for header files.
+Only the directories you have specified with \fB\-I\fR options
+(and the directory of the current file, if appropriate) are searched.
+.if n .Ip "\f(CW""\-nostdinc++""\fR" 4
+.el .Ip "\f(CW\-nostdinc++\fR" 4
+.IX Item "-nostdinc++"
+Do not search for header files in the \*(C+\-specific standard directories,
+but do still search the other standard directories.  (This option is
+used when building the \*(C+ library.)
+.if n .Ip "\f(CW""\-include \f(CIfile\f(CW""\fR" 4
+.el .Ip "\f(CW\-include \f(CIfile\f(CW\fR" 4
+.IX Item "-include file"
+Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
+line of the primary source file.  However, the first directory searched
+for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
+the directory containing the main source file.  If not found there, it
+is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
+chain as normal.
+.Sp
+If multiple \fB\-include\fR options are given, the files are included
+in the order they appear on the command line.
+.if n .Ip "\f(CW""\-imacros \f(CIfile\f(CW""\fR" 4
+.el .Ip "\f(CW\-imacros \f(CIfile\f(CW\fR" 4
+.IX Item "-imacros file"
+Exactly like \fB\-include\fR, except that any output produced by
+scanning \fIfile\fR is thrown away.  Macros it defines remain defined.
+This allows you to acquire all the macros from a header without also
+processing its declarations.
+.Sp
+All files specified by \fB\-imacros\fR are processed before all files
+specified by \fB\-include\fR.
+.if n .Ip "\f(CW""\-idirafter \f(CIdir\f(CW""\fR" 4
+.el .Ip "\f(CW\-idirafter \f(CIdir\f(CW\fR" 4
+.IX Item "-idirafter dir"
+Search \fIdir\fR for header files, but do it \fIafter\fR all
+directories specified with \fB\-I\fR and the standard system directories
+have been exhausted.  \fIdir\fR is treated as a system include directory.
+.if n .Ip "\f(CW""\-iprefix \f(CIprefix\f(CW""\fR" 4
+.el .Ip "\f(CW\-iprefix \f(CIprefix\f(CW\fR" 4
+.IX Item "-iprefix prefix"
+Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
+options.  If the prefix represents a directory, you should include the
+final \fB/\fR.
+.if n .Ip "\f(CW""\-iwithprefix \f(CIdir\f(CW""\fR" 4
+.el .Ip "\f(CW\-iwithprefix \f(CIdir\f(CW\fR" 4
+.IX Item "-iwithprefix dir"
+.PD 0
+.if n .Ip "\f(CW""\-iwithprefixbefore \f(CIdir\f(CW""\fR" 4
+.el .Ip "\f(CW\-iwithprefixbefore \f(CIdir\f(CW\fR" 4
+.IX Item "-iwithprefixbefore dir"
+.PD
+Append \fIdir\fR to the prefix specified previously with
+\&\fB\-iprefix\fR, and add the resulting directory to the include search
+path.  \fB\-iwithprefixbefore\fR puts it in the same place \fB\-I\fR
+would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
+.Sp
+Use of these options is discouraged.
+.if n .Ip "\f(CW""\-isystem \f(CIdir\f(CW""\fR" 4
+.el .Ip "\f(CW\-isystem \f(CIdir\f(CW\fR" 4
+.IX Item "-isystem dir"
+Search \fIdir\fR for header files, after all directories specified by
+\&\fB\-I\fR but before the standard system directories.  Mark it
+as a system directory, so that it gets the same special treatment as
+is applied to the standard system directories.  
+.if n .Ip "\f(CW""\-fpreprocessed""\fR" 4
+.el .Ip "\f(CW\-fpreprocessed\fR" 4
+.IX Item "-fpreprocessed"
+Indicate to the preprocessor that the input file has already been
+preprocessed.  This suppresses things like macro expansion, trigraph
+conversion, escaped newline splicing, and processing of most directives.
+In this mode the integrated preprocessor is little more than a tokenizer
+for the front ends.
+.Sp
+\&\fB\-fpreprocessed\fR is implicit if the input file has one of the
+extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
+extensions that \s-1GCC\s0 uses for preprocessed files created by
+\&\fB\-save-temps\fR.
+.if n .Ip "\f(CW""\-ftabstop=\f(CIwidth\f(CW""\fR" 4
+.el .Ip "\f(CW\-ftabstop=\f(CIwidth\f(CW\fR" 4
+.IX Item "-ftabstop=width"
+Set the distance between tab stops.  This helps the preprocessor report
+correct column numbers in warnings or errors, even if tabs appear on the
+line.  If the value is less than 1 or greater than 100, the option is
+ignored.  The default is 8.
+.if n .Ip "\f(CW""\-fno\-show\-column""\fR" 4
+.el .Ip "\f(CW\-fno\-show\-column\fR" 4
+.IX Item "-fno-show-column"
+Do not print column numbers in diagnostics.  This may be necessary if
+diagnostics are being scanned by a program that does not understand the
+column numbers, such as \f(CW\*(C`dejagnu\*(C'\fR.
+.if n .Ip "\f(CW""\-A \f(CIpredicate\f(CW=\f(CIanswer\f(CW""\fR" 4
+.el .Ip "\f(CW\-A \f(CIpredicate\f(CW=\f(CIanswer\f(CW\fR" 4
+.IX Item "-A predicate=answer"
+Make an assertion with the predicate \fIpredicate\fR and answer
+\&\fIanswer\fR.  This form is preferred to the older form \fB\-A\fR
+\&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because
+it does not use shell special characters.  
+.if n .Ip "\f(CW""\-A \-\f(CIpredicate\f(CW=\f(CIanswer\f(CW""\fR" 4
+.el .Ip "\f(CW\-A \-\f(CIpredicate\f(CW=\f(CIanswer\f(CW\fR" 4
+.IX Item "-A -predicate=answer"
+Cancel an assertion with the predicate \fIpredicate\fR and answer
+\&\fIanswer\fR.
+.if n .Ip "\f(CW""\-A\-""\fR" 4
+.el .Ip "\f(CW\-A\-\fR" 4
+.IX Item "-A-"
+Cancel all predefined assertions and all assertions preceding it on
+the command line.  Also, undefine all predefined macros and all
+macros preceding it on the command line.  (This is a historical wart and
+may change in the future.)
+.if n .Ip "\f(CW""\-dM""\fR" 4
+.el .Ip "\f(CW\-dM\fR" 4
+.IX Item "-dM"
+Instead of the normal output, generate a list of \fB#define\fR
+directives for all the macros defined during the execution of the
+preprocessor, including predefined macros.  This gives you a way of
+finding out what is predefined in your version of the preprocessor.
+Assuming you have no file \fBfoo.h\fR, the command
+.Sp
+.Vb 1
+\&        touch foo.h; cpp -dM foo.h
+.Ve
+will show all the predefined macros.
+.if n .Ip "\f(CW""\-dD""\fR" 4
+.el .Ip "\f(CW\-dD\fR" 4
+.IX Item "-dD"
+Like \fB\-dM\fR except in two respects: it does \fInot\fR include the
+predefined macros, and it outputs \fIboth\fR the \fB#define\fR
+directives and the result of preprocessing.  Both kinds of output go to
+the standard output file.
+.if n .Ip "\f(CW""\-dN""\fR" 4
+.el .Ip "\f(CW\-dN\fR" 4
+.IX Item "-dN"
+Like \fB\-dD\fR, but emit only the macro names, not their expansions.
+.if n .Ip "\f(CW""\-dI""\fR" 4
+.el .Ip "\f(CW\-dI\fR" 4
+.IX Item "-dI"
+Output \fB#include\fR directives in addition to the result of
+preprocessing.
+.if n .Ip "\f(CW""\-P""\fR" 4
+.el .Ip "\f(CW\-P\fR" 4
+.IX Item "-P"
+Inhibit generation of linemarkers in the output from the preprocessor.
+This might be useful when running the preprocessor on something that is
+not C code, and will be sent to a program which might be confused by the
+linemarkers.  
+.if n .Ip "\f(CW""\-C""\fR" 4
+.el .Ip "\f(CW\-C\fR" 4
+.IX Item "-C"
+Do not discard comments.  All comments are passed through to the output
+file, except for comments in processed directives, which are deleted
+along with the directive.  Comments appearing in the expansion list of a
+macro will be preserved, and appear in place wherever the macro is
+invoked.
+.Sp
+You should be prepared for side effects when using \fB\-C\fR; it causes
+the preprocessor to treat comments as tokens in their own right.  For
+example, macro redefinitions that were trivial when comments were
+replaced by a single space might become significant when comments are
+retained.  Also, comments appearing at the start of what would be a
+directive line have the effect of turning that line into an ordinary
+source line, since the first token on the line is no longer a \fB#\fR.
+.if n .Ip "\f(CW""\-gcc""\fR" 4
+.el .Ip "\f(CW\-gcc\fR" 4
+.IX Item "-gcc"
+Define the macros _\|_GNUC_\|_, _\|_GNUC_MINOR_\|_ and
+_\|_GNUC_PATCHLEVEL_\|_. These are defined automatically when you use
+\&\fBgcc \-E\fR; you can turn them off in that case with \fB\-no-gcc\fR.
+.if n .Ip "\f(CW""\-traditional""\fR" 4
+.el .Ip "\f(CW\-traditional\fR" 4
+.IX Item "-traditional"
+Try to imitate the behavior of old-fashioned C, as opposed to \s-1ISO\s0
+C. 
+.if n .Ip "\f(CW""\-trigraphs""\fR" 4
+.el .Ip "\f(CW\-trigraphs\fR" 4
+.IX Item "-trigraphs"
+Process trigraph sequences.  
+.if n .Ip "\f(CW""\-remap""\fR" 4
+.el .Ip "\f(CW\-remap\fR" 4
+.IX Item "-remap"
+Enable special code to work around file systems which only permit very
+short file names, such as \s-1MS-DOS\s0.
+.if n .Ip "\f(CW""\-$""\fR" 4
+.el .Ip "\f(CW\-$\fR" 4
 .IX Item "-$"
 Forbid the use of \fB$\fR in identifiers.  The C standard allows
 implementations to define extra characters that can appear in
 identifiers.  By default the \s-1GNU\s0 C preprocessor permits \fB$\fR, a
 common extension.
+.if n .Ip "\f(CW""\-h""\fR" 4
+.el .Ip "\f(CW\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.if n .Ip "\f(CW""\-\-help""\fR" 4
+.el .Ip "\f(CW\-\-help\fR" 4
+.IX Item "--help"
+.if n .Ip "\f(CW""\-\-target\-help""\fR" 4
+.el .Ip "\f(CW\-\-target\-help\fR" 4
+.IX Item "--target-help"
+.PD
+Print text describing all the command line options instead of
+preprocessing anything.
+.if n .Ip "\f(CW""\-v""\fR" 4
+.el .Ip "\f(CW\-v\fR" 4
+.IX Item "-v"
+Verbose mode.  Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
+execution, and report the final form of the include path.
+.if n .Ip "\f(CW""\-H""\fR" 4
+.el .Ip "\f(CW\-H\fR" 4
+.IX Item "-H"
+Print the name of each header file used, in addition to other normal
+activities.  Each name is indented to show how deep in the
+\&\fB#include\fR stack it is.
+.if n .Ip "\f(CW""\-version""\fR" 4
+.el .Ip "\f(CW\-version\fR" 4
+.IX Item "-version"
+.PD 0
+.if n .Ip "\f(CW""\-\-version""\fR" 4
+.el .Ip "\f(CW\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Print out \s-1GNU\s0 \s-1CPP\s0's version number.  With one dash, proceed to
+preprocess as normal.  With two dashes, exit immediately.
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
 \&\fIgcc\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), and the Info entries for \fIcpp\fR, \fIgcc\fR, and
@@ -751,14 +760,10 @@ Copyright (c) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
 1997, 1998, 1999, 2000, 2001
 Free Software Foundation, Inc.
 .PP
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-.PP
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-.PP
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation.  A copy of
+the license is included in the accompanying manual for \s-1GNU\s0 \s-1CC\s0, in the
+section ``\s-1GNU\s0 Free Documentation License''.
+This manual contains no Invariant Sections, and has no Front-Cover Texts
+or Back-Cover Texts.