mirror of
https://github.com/pmret/gcc-papermario.git
synced 2024-11-08 20:02:47 +01:00
488 lines
21 KiB
Plaintext
488 lines
21 KiB
Plaintext
This is Info file cpp.info, produced by Makeinfo version 1.67 from the
|
||
input file cpp.texi.
|
||
|
||
This file documents the GNU C Preprocessor.
|
||
|
||
Copyright 1987, 1989, 1991, 1992, 1993, 1994, 1995 Free Software
|
||
Foundation, Inc.
|
||
|
||
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.
|
||
|
||
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.
|
||
|
||
Permission is granted to copy and distribute translations of this
|
||
manual into another language, under the above conditions for modified
|
||
versions.
|
||
|
||
|
||
File: cpp.info, Node: Invocation, Next: Concept Index, Prev: Output, Up: Top
|
||
|
||
Invoking the C Preprocessor
|
||
===========================
|
||
|
||
Most often when you use the C preprocessor you will not have to
|
||
invoke it explicitly: the C compiler will do so automatically.
|
||
However, the preprocessor is sometimes useful on its own.
|
||
|
||
The C preprocessor expects two file names as arguments, INFILE and
|
||
OUTFILE. The preprocessor reads INFILE together with any other files
|
||
it specifies with `#include'. All the output generated by the combined
|
||
input files is written in OUTFILE.
|
||
|
||
Either INFILE or OUTFILE may be `-', which as INFILE means to read
|
||
from standard input and as OUTFILE means to write to standard output.
|
||
Also, if OUTFILE or both file names are omitted, the standard output
|
||
and standard input are used for the omitted file names.
|
||
|
||
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.
|
||
|
||
`-P'
|
||
Inhibit generation of `#'-lines with line-number information in
|
||
the output from the preprocessor (*note Output::.). 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
|
||
`#'-lines.
|
||
|
||
`-C'
|
||
Do not discard comments: pass them through to the output file.
|
||
Comments appearing in arguments of a macro call will be copied to
|
||
the output before the expansion of the macro call.
|
||
|
||
`-traditional'
|
||
Try to imitate the behavior of old-fashioned C, as opposed to ANSI
|
||
C.
|
||
|
||
* Traditional macro expansion pays no attention to singlequote
|
||
or doublequote characters; macro argument symbols are
|
||
replaced by the argument values even when they appear within
|
||
apparent string or character constants.
|
||
|
||
* 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.
|
||
|
||
* However, traditionally the end of the line terminates a
|
||
string or character constant, with no error.
|
||
|
||
* In traditional C, a comment is equivalent to no text at all.
|
||
(In ANSI C, a comment counts as whitespace.)
|
||
|
||
* Traditional C does not have the concept of a "preprocessing
|
||
number". It considers `1.0e+4' to be three tokens: `1.0e',
|
||
`+', and `4'.
|
||
|
||
* A macro is not suppressed within its own definition, in
|
||
traditional C. Thus, any macro that is used recursively
|
||
inevitably causes an error.
|
||
|
||
* The character `#' has no special meaning within a macro
|
||
definition in traditional C.
|
||
|
||
* 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 ANSI C.)
|
||
|
||
* Traditionally, `\' inside a macro argument suppresses the
|
||
syntactic significance of the following character.
|
||
|
||
`-trigraphs'
|
||
Process ANSI standard trigraph sequences. These are
|
||
three-character sequences, all starting with `??', that are
|
||
defined by ANSI C to stand for single characters. For example,
|
||
`??/' stands for `\', so `'??/n'' is a character constant for a
|
||
newline. Strictly speaking, the GNU C preprocessor does not
|
||
support all programs in ANSI Standard C unless `-trigraphs' is
|
||
used, but if you ever notice the difference it will be with relief.
|
||
|
||
You don't want to know any more about trigraphs.
|
||
|
||
`-pedantic'
|
||
Issue warnings required by the ANSI C standard in certain cases
|
||
such as when text other than a comment follows `#else' or `#endif'.
|
||
|
||
`-pedantic-errors'
|
||
Like `-pedantic', except that errors are produced rather than
|
||
warnings.
|
||
|
||
`-Wtrigraphs'
|
||
Warn if any trigraphs are encountered (assuming they are enabled).
|
||
|
||
`-Wcomment'
|
||
Warn whenever a comment-start sequence `/*' appears in a `/*'
|
||
comment, or whenever a Backslash-Newline appears in a `//' comment.
|
||
|
||
`-Wall'
|
||
Requests both `-Wtrigraphs' and `-Wcomment' (but not
|
||
`-Wtraditional' or `-Wundef').
|
||
|
||
`-Wtraditional'
|
||
Warn about certain constructs that behave differently in
|
||
traditional and ANSI C.
|
||
|
||
`-Wundef'
|
||
Warn if an undefined identifier is evaluated in an `#if' directive.
|
||
|
||
`-I DIRECTORY'
|
||
Add the directory DIRECTORY to the head of the list of directories
|
||
to be searched for header files (*note Include Syntax::.). 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 `-I' option,
|
||
the directories are scanned in left-to-right order; the standard
|
||
system directories come after.
|
||
|
||
`-I-'
|
||
Any directories specified with `-I' options before the `-I-'
|
||
option are searched only for the case of `#include "FILE"'; they
|
||
are not searched for `#include <FILE>'.
|
||
|
||
If additional directories are specified with `-I' options after
|
||
the `-I-', these directories are searched for all `#include'
|
||
directives.
|
||
|
||
In addition, the `-I-' option inhibits the use of the current
|
||
directory as the first search directory for `#include "FILE"'.
|
||
Therefore, the current directory is searched only if it is
|
||
requested explicitly with `-I.'. Specifying both `-I-' and `-I.'
|
||
allows you to control precisely which directories are searched
|
||
before the current one and which are searched after.
|
||
|
||
`-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 C++-specific standard
|
||
directories, but do still search the other standard directories.
|
||
(This option is used when building the C++ library.)
|
||
|
||
`-remap'
|
||
When searching for a header file in a directory, remap file names
|
||
if a file named `header.gcc' exists in that directory. This can
|
||
be used to work around limitations of file systems with file name
|
||
restrictions. The `header.gcc' 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.
|
||
|
||
`-D NAME'
|
||
Predefine NAME as a macro, with definition `1'.
|
||
|
||
`-D NAME=DEFINITION'
|
||
Predefine NAME as a macro, with definition DEFINITION. There are
|
||
no restrictions on the contents of DEFINITION, 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 `-D' for the same NAME, the rightmost definition
|
||
takes effect.
|
||
|
||
`-U NAME'
|
||
Do not predefine NAME. If both `-U' and `-D' are specified for
|
||
one name, the `-U' beats the `-D' and the name is not predefined.
|
||
|
||
`-undef'
|
||
Do not predefine any nonstandard macros.
|
||
|
||
`-A PREDICATE(ANSWER)'
|
||
Make an assertion with the predicate PREDICATE and answer ANSWER.
|
||
*Note Assertions::.
|
||
|
||
You can use `-A-' to disable all predefined assertions; it also
|
||
undefines all predefined macros that identify the type of target
|
||
system.
|
||
|
||
`-dM'
|
||
Instead of outputting the result of preprocessing, output a list of
|
||
`#define' 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 `foo.h', the command
|
||
|
||
touch foo.h; cpp -dM foo.h
|
||
|
||
will show the values of any predefined macros.
|
||
|
||
`-dD'
|
||
Like `-dM' except in two respects: it does *not* include the
|
||
predefined macros, and it outputs *both* the `#define' directives
|
||
and the result of preprocessing. Both kinds of output go to the
|
||
standard output file.
|
||
|
||
`-dI'
|
||
Output `#include' directives in addition to the result of
|
||
preprocessing.
|
||
|
||
`-M [-MG]'
|
||
Instead of outputting the result of preprocessing, output a rule
|
||
suitable for `make' describing the dependencies of the main source
|
||
file. The preprocessor outputs one `make' rule containing the
|
||
object file name for that source file, a colon, and the names of
|
||
all the included files. If there are many included files then the
|
||
rule is split into several lines using `\'-newline.
|
||
|
||
`-MG' says to treat missing header files as generated files and
|
||
assume they live in the same directory as the source file. It
|
||
must be specified in addition to `-M'.
|
||
|
||
This feature is used in automatic updating of makefiles.
|
||
|
||
`-MM [-MG]'
|
||
Like `-M' but mention only the files included with `#include
|
||
"FILE"'. System header files included with `#include <FILE>' are
|
||
omitted.
|
||
|
||
`-MD FILE'
|
||
Like `-M' but the dependency information is written to FILE. This
|
||
is in addition to compiling the file as specified--`-MD' does not
|
||
inhibit ordinary compilation the way `-M' does.
|
||
|
||
When invoking gcc, do not specify the FILE argument. Gcc will
|
||
create file names made by replacing ".c" with ".d" at the end of
|
||
the input file names.
|
||
|
||
In Mach, you can use the utility `md' to merge multiple dependency
|
||
files into a single dependency file suitable for using with the
|
||
`make' command.
|
||
|
||
`-MMD FILE'
|
||
Like `-MD' except mention only user header files, not system
|
||
header files.
|
||
|
||
`-H'
|
||
Print the name of each header file used, in addition to other
|
||
normal activities.
|
||
|
||
`-imacros FILE'
|
||
Process FILE as input, discarding the resulting output, before
|
||
processing the regular input file. Because the output generated
|
||
from FILE is discarded, the only effect of `-imacros FILE' is to
|
||
make the macros defined in FILE available for use in the main
|
||
input.
|
||
|
||
`-include FILE'
|
||
Process FILE as input, and include all the resulting output,
|
||
before processing the regular input file.
|
||
|
||
`-idirafter DIR'
|
||
Add the directory DIR 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 `-I' adds to).
|
||
|
||
`-iprefix PREFIX'
|
||
Specify PREFIX as the prefix for subsequent `-iwithprefix' options.
|
||
|
||
`-iwithprefix DIR'
|
||
Add a directory to the second include path. The directory's name
|
||
is made by concatenating PREFIX and DIR, where PREFIX was
|
||
specified previously with `-iprefix'.
|
||
|
||
`-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.
|
||
|
||
`-lang-c'
|
||
`-lang-c89'
|
||
`-lang-c++'
|
||
`-lang-objc'
|
||
`-lang-objc++'
|
||
Specify the source language. `-lang-c' is the default; it allows
|
||
recognition of C++ comments (comments that begin with `//' and end
|
||
at end of line) and hexadecimal floating-point constants, since
|
||
these features will most likely appear in the next C standard.
|
||
`-lang-c89' disables recognition of C++ comments and hexadecimal
|
||
floating-point constants. `-lang-c++' handles C++ comment syntax
|
||
and includes extra default include directories for C++.
|
||
`-lang-objc' enables the Objective C `#import' directive.
|
||
`-lang-objc++' enables both C++ and Objective C extensions.
|
||
|
||
These options are generated by the compiler driver `gcc', but not
|
||
passed from the `gcc' command line unless you use the driver's
|
||
`-Wp' option.
|
||
|
||
`-lint'
|
||
Look for commands to the program checker `lint' embedded in
|
||
comments, and emit them preceded by `#pragma lint'. For example,
|
||
the comment `/* NOTREACHED */' becomes `#pragma lint NOTREACHED'.
|
||
|
||
This option is available only when you call `cpp' directly; `gcc'
|
||
will not pass it from its command line.
|
||
|
||
`-$'
|
||
Forbid the use of `$' in identifiers. This was formerly required
|
||
for strict conformance to the C Standard before the standard was
|
||
corrected.
|
||
|
||
This option is available only when you call `cpp' directly; `gcc'
|
||
will not pass it from its command line.
|
||
|
||
|
||
File: cpp.info, Node: Concept Index, Next: Index, Prev: Invocation, Up: Top
|
||
|
||
Concept Index
|
||
*************
|
||
|
||
* Menu:
|
||
|
||
* ##: Concatenation.
|
||
* arguments in macro definitions: Argument Macros.
|
||
* assertions: Assertions.
|
||
* assertions, undoing: Assertions.
|
||
* blank macro arguments: Argument Macros.
|
||
* cascaded macros: Cascaded Macros.
|
||
* commenting out code: Deleted Code.
|
||
* computed #include: Include Syntax.
|
||
* concatenation: Concatenation.
|
||
* conditionals: Conditionals.
|
||
* directives: Directives.
|
||
* expansion of arguments: Argument Prescan.
|
||
* function-like macro: Argument Macros.
|
||
* header file: Header Files.
|
||
* including just once: Once-Only.
|
||
* inheritance: Inheritance.
|
||
* invocation of the preprocessor: Invocation.
|
||
* line control: Combining Sources.
|
||
* macro argument expansion: Argument Prescan.
|
||
* macro body uses macro: Cascaded Macros.
|
||
* macros with argument: Argument Macros.
|
||
* manifest constant: Simple Macros.
|
||
* newlines in macro arguments: Newlines in Args.
|
||
* null directive: Other Directives.
|
||
* options: Invocation.
|
||
* output format: Output.
|
||
* overriding a header file: Inheritance.
|
||
* parentheses in macro bodies: Macro Parentheses.
|
||
* pitfalls of macros: Macro Pitfalls.
|
||
* predefined macros: Predefined.
|
||
* predicates: Assertions.
|
||
* preprocessing directives: Directives.
|
||
* prescan of macro arguments: Argument Prescan.
|
||
* problems with macros: Macro Pitfalls.
|
||
* redefining macros: Redefining.
|
||
* repeated inclusion: Once-Only.
|
||
* retracting assertions: Assertions.
|
||
* second include path: Invocation.
|
||
* self-reference: Self-Reference.
|
||
* semicolons (after macro calls): Swallow Semicolon.
|
||
* side effects (in macro arguments): Side Effects.
|
||
* simple macro: Simple Macros.
|
||
* space as macro argument: Argument Macros.
|
||
* standard predefined macros: Standard Predefined.
|
||
* stringification: Stringification.
|
||
* testing predicates: Assertions.
|
||
* unassert: Assertions.
|
||
* undefining macros: Undefining.
|
||
* unsafe macros: Side Effects.
|
||
|
||
|
||
File: cpp.info, Node: Index, Prev: Concept Index, Up: Top
|
||
|
||
Index of Directives, Macros and Options
|
||
***************************************
|
||
|
||
* Menu:
|
||
|
||
* #assert: Assertions.
|
||
* #cpu: Assertions.
|
||
* #define: Argument Macros.
|
||
* #elif: #elif Directive.
|
||
* #else: #else Directive.
|
||
* #error: #error Directive.
|
||
* #ident: Other Directives.
|
||
* #if: Conditional Syntax.
|
||
* #ifdef: Conditionals-Macros.
|
||
* #ifndef: Conditionals-Macros.
|
||
* #import: Once-Only.
|
||
* #include: Include Syntax.
|
||
* #include_next: Inheritance.
|
||
* #line: Combining Sources.
|
||
* #machine: Assertions.
|
||
* #pragma: Other Directives.
|
||
* #pragma once: Once-Only.
|
||
* #system: Assertions.
|
||
* #unassert: Assertions.
|
||
* #warning: #error Directive.
|
||
* -$: Invocation.
|
||
* -A: Invocation.
|
||
* -C: Invocation.
|
||
* -D: Invocation.
|
||
* -dD: Invocation.
|
||
* -dI: Invocation.
|
||
* -dM: Invocation.
|
||
* -H: Invocation.
|
||
* -I: Invocation.
|
||
* -idirafter: Invocation.
|
||
* -imacros: Invocation.
|
||
* -include: Invocation.
|
||
* -iprefix: Invocation.
|
||
* -isystem: Invocation.
|
||
* -iwithprefix: Invocation.
|
||
* -lang-c: Invocation.
|
||
* -lang-c++: Invocation.
|
||
* -lang-c89: Invocation.
|
||
* -lang-objc: Invocation.
|
||
* -lang-objc++: Invocation.
|
||
* -M: Invocation.
|
||
* -MD: Invocation.
|
||
* -MM: Invocation.
|
||
* -MMD: Invocation.
|
||
* -nostdinc: Invocation.
|
||
* -nostdinc++: Invocation.
|
||
* -P: Invocation.
|
||
* -pedantic: Invocation.
|
||
* -pedantic-errors: Invocation.
|
||
* -remap: Invocation.
|
||
* -traditional: Invocation.
|
||
* -trigraphs: Invocation.
|
||
* -U: Invocation.
|
||
* -undef: Invocation.
|
||
* -Wall: Invocation.
|
||
* -Wcomment: Invocation.
|
||
* -Wtraditional: Invocation.
|
||
* -Wtrigraphs: Invocation.
|
||
* -Wundef: Invocation.
|
||
* __BASE_FILE__: Standard Predefined.
|
||
* __CHAR_UNSIGNED__: Standard Predefined.
|
||
* __cplusplus: Standard Predefined.
|
||
* __DATE__: Standard Predefined.
|
||
* __FILE__: Standard Predefined.
|
||
* __GNUC__: Standard Predefined.
|
||
* __GNUC_MINOR__: Standard Predefined.
|
||
* __GNUG__: Standard Predefined.
|
||
* __INCLUDE_LEVEL_: Standard Predefined.
|
||
* __LINE__: Standard Predefined.
|
||
* __OPTIMIZE__: Standard Predefined.
|
||
* __REGISTER_PREFIX__: Standard Predefined.
|
||
* __STDC__: Standard Predefined.
|
||
* __STDC_VERSION__: Standard Predefined.
|
||
* __STRICT_ANSI__: Standard Predefined.
|
||
* __TIME__: Standard Predefined.
|
||
* __USER_LABEL_PREFIX__: Standard Predefined.
|
||
* __VERSION__: Standard Predefined.
|
||
* _AM29000: Nonstandard Predefined.
|
||
* _AM29K: Nonstandard Predefined.
|
||
* BSD: Nonstandard Predefined.
|
||
* defined: Conditionals-Macros.
|
||
* M68020: Nonstandard Predefined.
|
||
* m68k: Nonstandard Predefined.
|
||
* mc68000: Nonstandard Predefined.
|
||
* ns32000: Nonstandard Predefined.
|
||
* pyr: Nonstandard Predefined.
|
||
* sequent: Nonstandard Predefined.
|
||
* sun: Nonstandard Predefined.
|
||
* system header files: Header Uses.
|
||
* unix: Nonstandard Predefined.
|
||
* vax: Nonstandard Predefined.
|
||
|
||
|