|
|
1.1 root 1: #ident "@(#)cpp:common/README 1.4"
2: August 25, 1978 updated to August 18, 1983
3:
4: Files in this directory form the C preprocessor, which handles '#include'
5: files and macro definition and expansion for the C compiler.
6: This new version is from 5 to 12 times faster (on UNIX systems) than the old.
7:
8: The preprocessor is not built in this directory; it is built in the
9: machine dependent directory of the target machine. To create the
10: executable file 'cpp':
11: cd ../<machine>
12: make -f ../common/cpp.mk PD_MACH=D_<machine> PD_SYS=D_<system>
13: where <machine> is the name of the target machine and <system> is the
14: target operating system. PD_MACH and PD_SYS determine which symbols
15: will be predefined in the new cpp.
16:
17: To install the preprocessor 'cpp' so it will be used by the C compiler:
18: # safety first: backup the existing version
19: cp /lib/cpp /lib/ocpp
20: # install the new version
21: make -f ../common/cpp.mk install PD_MACH=D_<machine> PD_SYS=D_<system>
22:
23: Invocation
24: cpp [-CEPR] [-Dname] ... [-Dname=def] ... [-Idirectory] ...
25: [-Uname] ... [<infile> [<outfile>]]
26:
27: If there are two non-flag arguments then the first is the name of the
28: input file and the second is the name of the output file. If there is
29: one non-flag argument then it is the name of the input file and the
30: output is written on the standard output. If there are no non-flag
31: arguments then the input is taken from the standard input and the output
32: is written on the standard output. Flag arguments are:
33:
34: -C retain comments in output
35: -Dname define name as "1"
36: -Dname=def define name as def
37: -E ignored
38: -Idirectory add directory to search list for #include files
39: -P don't insert lines "# 12 \"foo.c\"" into output
40: -R allow recursive macros
41: -Uname undefine name
42:
43: Documentation clarifications:
44: Symbols defined on the command line by "-Dfoo" are defined as "1",
45: i.e., as if they had been defined by "#define foo 1" or
46: "-Dfoo=1".
47: The directory search order for #include files is
48: 1) the directory of the file which contains the #include request
49: (e.g. #include is relative to the file being scanned when
50: the request is made)
51: 2) the directories specified by -I, in left-to-right order
52: 3) the standard directory(s) (which for UNIX is /usr/include)
53: An unescaped linefeed (the single character "\n") terminates a
54: character constant or quoted string.
55: An escaped linefeed (the two-character sequence "\\\n") may be
56: used in the body of a '#define' statement to continue
57: the definition onto the next line. The escaped linefeed is
58: converted into a single blank in the macro body.
59: Comments are uniformly removed (except if the argument -C is specified).
60: They are also ignored, except that a comment terminates a token.
61: Thus "foo/* la di da */bar" may expand 'foo' and 'bar' but
62: will never expand 'foobar'. If neither 'foo' nor 'bar' is a
63: macro then the output is "foobar", even if 'foobar'
64: is defined as something else. The file
65: #define foo(a,b)b/**/a
66: foo(1,2)
67: produces "21" because the comment causes a break which enables
68: the recognition of 'b' and 'a' as formals in the string
69: "b/**/a".
70: Macro formal parameters are recognized in '#define' bodies even inside
71: character constants and quoted strings. The output from
72: #define foo(a) '\a'
73: foo(bar)
74: is the six characters "'\\bar'". Macro names are not recognized
75: inside character constants or quoted strings during the
76: regular scan.
77: Thus
78: #define foo bar
79: printf("foo");
80: does not expand 'foo' in the second line, because it is inside
81: a quoted string which is not part of a '#define' macro
82: definition.
83: Macros are not expanded while processing a '#define' or '#undef'.
84: Thus
85: #define foo bletch
86: #define bar foo
87: #undef foo
88: bar
89: produces "foo". The token appearing immediately after a
90: '#ifdef' or '#ifndef' is not expanded (of course!).
91: Macros are not expanded during the scan which determines the actual
92: parameters to another macro call. Thus
93: | #define foo(a,b)b a
94: | #define bar hi
95: | foo(bar,
96: | #define bar bye
97: | )
98: |produces " bye" (and warns about the redefinition of 'bar').
99: |--->not any longer. Newlines have been stripped by now, so
100: the # is no longer at the beginning of a line.
101: The note is still true, though. When a macro is expanded,
102: the first step is to put the actual arguments in the
103: corresponding locations in the token-string the macro
104: is defined to be. The next step is to start to re-
105: process the token-string as input text.
106:
107: There are some differences between the new and the old preprocessor.
108: Bugs fixed:
109: "1.e4" is recognized as a floating-point number, rather than as an
110: opportunity to expand the possible macro name "e4".
111: Any kind and amount of white space (space, tab, linefeed, vertical tab,
112: formfeed, carriage return) is allowed between a macro name and
113: the left parenthesis which introduces its actual parameters.
114: The comma operator is legal in preprocessor '#if' statements.
115: Macros with parameters are legal in preprocessor '#if' statements.
116: Single-character character constants are legal in preprocessor '#if'
117: statements.
118: Linefeeds are put out in the proper place when a multiline comment
119: is not passed through to the output.
120: The following example expands to "# # #" :
121: #define foo #
122: foo foo foo
123: If the -R flag is not specified then the invocation of some recursive
124: macros is trapped and the recursion forcibly terminated with an
125: error message. The recursions that are trapped are the ones
126: in which the nesting level is non-decreasing from some point on.
127: In particular,
128: #define a a
129: a
130: will be detected. (Use "#undef a" if that is what you want.)
131: The recursion
132: #define a c b
133: #define b c a
134: #define c foo
135: a
136: will not be detected because the nesting level decreases after
137: each expansion of "c".
138: The -R flag specifically allows recursive macros and recursion will
139: be strictly obeyed (to the extent that space is available).
140: Assuming that -R is specified:
141: #define a a
142: a
143: causes an infinite loop with very little output. The tail
144: recursion
145: #define a <b
146: #define b >a
147: a
148: causes the string "<>" to be output infinitely many times. The
149: non-tail recursion
150: #define a b>
151: #define b a<
152: a
153: complains "too much pushback", dumps the pushback, and continues
154: (again, infinitely).
155:
156: Stylistic choice:
157: Nothing (not even linefeeds) is output while a false '#if', '#ifdef',
158: or '#ifndef' is in effect. Thus when all conditions become true
159: a line of the form "# 12345 \"foo.c\"" is output (unless -P).
160: Error and warning messages always appear on standard error (file
161: descriptor 2).
162: Mismatch between the number of formals and actuals in a macro call
163: produces only a warning, and not an error. Excess actuals
164: are ignored; missing actuals are turned into null strings.
165: Comments which worked their way into #if lines no longer cause a
166: syntax error.
167: Newlines found during the scan for actual arguments are changed to
168: blanks so that confusing (for cpp) situations did not occur.
169: Formfeeds (^L) act like newlines w.r.t. recognizing # as the flag
170: for cpp.
171:
172: Incompatibility:
173: The virgule '/' in "a=/*b" is interpreted as the first character of
174: the pair "/*" which introduces a comment, rather than as the
175: second character of the divide-and-replace operator "=/".
176: This incompatibility reflects the recent change in the C
177: language which made "a/=*b" the legal way to write such a
178: statement if the meaning "a=a/ *b" is intended.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.