| This is Info file cpp.info, produced by Makeinfo version 1.68 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 libg++.) |
| |
| `-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. |
| |
| |