home *** CD-ROM | disk | FTP | other *** search
GNU Info File | 1994-07-14 | 19.5 KB | 457 lines |
- This is Info file cpp.info, produced by Makeinfo-1.54 from the input
- file cpp.texi.
-
- This file documents the GNU C Preprocessor.
-
- Copyright 1987, 1989, 1991, 1992, 1993 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.
-
- `-Wall'
- Requests both `-Wtrigraphs' and `-Wcomment' (but not
- `-Wtraditional').
-
- `-Wtraditional'
- Warn about certain constructs that behave differently in
- traditional and ANSI C.
-
- `-I DIRECTORY'
- Add the directory DIRECTORY to the end 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'
- commands.
-
- 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 libg++.)
-
- `-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' commands 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' commands
- and the result of preprocessing. Both kinds of output go to the
- standard output file.
-
- `-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-c++'
- `-lang-objc'
- `-lang-objc++'
- Specify the source language. `-lang-c++' makes the preprocessor
- handle C++ comment syntax (comments may begin with `//', in which
- case they end at end of line), and includes extra default include
- directories for C++; and `-lang-objc' enables the Objective C
- `#import' command. `-lang-c' explicitly turns off both of these
- extensions, and `-lang-objc++' enables both.
-
- These options are generated by the compiler driver `gcc', but not
- passed from the `gcc' command line.
-
- `-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 is required for ANSI
- conformance. `gcc' automatically supplies this option to the
- preprocessor if you specify `-ansi', but `gcc' doesn't recognize
- the `-$' option itself--to use it without the other effects of
- `-ansi', you must call the preprocessor directly.
-
- 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.
- * commands: Commands.
- * commenting out code: Deleted Code.
- * computed #include: Include Syntax.
- * concatenation: Concatenation.
- * conditionals: Conditionals.
- * 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 command: Other Commands.
- * 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.
- * preprocessor commands: Commands.
- * 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 Commands, Macros and Options
- *************************************
-
- * Menu:
-
- * #assert: Assertions.
- * #cpu: Assertions.
- * #define: Argument Macros.
- * #elif: #elif Command.
- * #else: #else Command.
- * #error: #error Command.
- * #ident: Other Commands.
- * #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 Commands.
- * #pragma once: Once-Only.
- * #system: Assertions.
- * #unassert: Assertions.
- * #warning: #error Command.
- * -$: Invocation.
- * -A: Invocation.
- * -C: Invocation.
- * -D: Invocation.
- * -dD: 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-objc: Invocation.
- * -lang-objc++: Invocation.
- * -M: Invocation.
- * -MD: Invocation.
- * -MM: Invocation.
- * -MMD: Invocation.
- * -nostdinc: Invocation.
- * -nostdinc++: Invocation.
- * -P: Invocation.
- * -pedantic: Invocation.
- * -pedantic-errors: Invocation.
- * -traditional: Invocation.
- * -trigraphs: Invocation.
- * -U: Invocation.
- * -undef: Invocation.
- * -Wall: Invocation.
- * -Wcomment: Invocation.
- * -Wtraditional: Invocation.
- * -Wtrigraphs: Invocation.
- * 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.
- * _AM29000: Nonstandard Predefined.
- * _AM29K: Nonstandard Predefined.
- * __BASE_FILE__: Standard Predefined.
- * __CHAR_UNSIGNED__: Standard Predefined.
- * __cplusplus: Standard Predefined.
- * __DATE__: Standard Predefined.
- * __FILE__: Standard Predefined.
- * __GNUC__: Standard Predefined.
- * __GNUG__: Standard Predefined.
- * __INCLUDE_LEVEL_: Standard Predefined.
- * __LINE__: Standard Predefined.
- * __OPTIMIZE__: Standard Predefined.
- * __STDC__: Standard Predefined.
- * __STRICT_ANSI__: Standard Predefined.
- * __TIME__: Standard Predefined.
- * __VERSION__: Standard Predefined.
-
-
-