|
|
1.1 root 1: .ds ZZ DEVELOPMENT PACKAGE
2: .TH MC68CPP 1 "630 MTG"
3: .SH NAME
4: mc68cpp \- the C language preprocessor
5: .SH SYNOPSIS
6: .B $DMD/lib/mc68cpp [
7: option ...
8: .B ]
9: .B [
10: ifile
11: .B [
12: ofile
13: .B ] ]
14: .SH DESCRIPTION
15: .PP
16: .I Mc68cpp\^
17: is the C language preprocessor which is invoked as the
18: first pass of any C compilation using the
19: .IR dmdcc (1)
20: command. Thus, the output of
21: .I mc68cpp\^
22: is designed to be in a form acceptable as input
23: to the next pass of the C compiler.
24: As the C language evolves,
25: .I mc68cpp\^
26: and the rest of the C compilation package will be
27: modified to follow these changes.
28: Therefore, the use of
29: .I mc68cpp\^
30: other than in this framework is not suggested.
31: The preferred way to invoke
32: .I mc68cpp\^
33: is through the
34: .IR dmdcc (1)
35: command, since the functionality of
36: .I mc68cpp\^
37: may some day be moved elsewhere. See
38: .IR m4 (1)
39: for a general macro processor.
40: .PP
41: .I Mc68cpp\^
42: optionally accepts two file names as arguments.
43: .I Ifile\^
44: and
45: .I ofile\^
46: are respectively the input and output
47: for the preprocessor. They default to standard input
48: and standard output if not supplied.
49: .PP
50: The following \fIoptions\fP to
51: .I mc68cpp\^
52: are recognized:
53: .TP
54: .B \-P
55: Preprocesses the input without producing the line control
56: information used by the next pass of the C compiler.
57: .TP
58: .B \-C
59: By default,
60: .I mc68cpp\^
61: strips C-style comments. If the
62: .B \-C
63: option is specified, all comments (except those found on
64: .I mc68cpp
65: directive lines)
66: are passed along.
67: .TP
68: .BI \-U name\^
69: Removes any initial definition of
70: .IR name ,
71: where
72: .I name\^
73: is a reserved symbol
74: that is predefined by the particular preprocessor.
75: The current list of these possibly reserved symbols includes:
76: .PD 0
77: .ne 3v
78: .RS 10
79: .TP 19
80: operating system:
81: ibm, gcos, os, tss, unix
82: .TP
83: hardware:
84: interdata, pdp11, u370, u3b, u3b5, vax, mc68000, mc68k16, mc68k32
85: .TP
86: \s-1UNIX\s+1 variant:
87: .SM RES\*S,
88: .SM RT
89: .RE
90: .PD
91: .TP
92: .BI \-D name\^
93: .PD 0
94: .TP
95: .BI \-D name=def\^
96: Defines
97: .I name\^
98: as if by a
99: .B #define
100: directive. If no
101: .I =def\^
102: is given,
103: .I name\^
104: is defined as 1.
105: .bp
106: .PD
107: .TP
108: .BI \-I dir\^
109: Changes the algorithm for searching for
110: .B #include
111: files
112: whose names do not begin with \f3/\fP
113: to look in
114: .I dir\^
115: before looking in the directories on the standard list.
116: Thus,
117: .B #include
118: files whose names are enclosed in \f3"\|"\fP
119: will be searched for
120: first in the directory of the
121: .I ifile\^
122: argument,
123: then in directories named in
124: .B \-I
125: options,
126: and last in directories on a standard list.
127: For
128: .B #include
129: files whose names are enclosed in
130: .BR <> ,
131: the directory of the
132: .I ifile\^
133: argument is not searched.
134: .PP
135: Two special names are understood by
136: .IR mc68cpp .
137: The name
138: .B _\^\^_\s-1LINE\s+1_\^\^_
139: is defined as the current line number (as a decimal integer) as known by
140: .IR mc68cpp ,
141: and
142: .B _\^\^_\s-1FILE\s+1_\^\^_
143: is defined as the current file name (as a C string) as known by
144: .I mc68cpp.\^
145: They can be used anywhere (including in macros) just as any
146: other defined name.
147: .PP
148: All
149: .I mc68cpp\^
150: directives start with lines whose first character is
151: .BR # .
152: The directives are:
153: .TP
154: .BI #define " name" " " token-string
155: Replaces subsequent instances of
156: .I name\^
157: with
158: .IR token-string .
159: .TP
160: \fB#define\fI name\fB(\fI arg\fB, ...,\fI arg\fB )\fI token-string\fR
161: Notice that there can be no space between
162: .I name
163: and the
164: .BR ( .
165: Replaces subsequent instances of
166: .I name
167: followed by a
168: .BR ( ,
169: a list of comma separated tokens, and a
170: .B )
171: by
172: .I token-string
173: where each occurrence of an
174: .I arg
175: in the
176: .I token-string
177: is replaced by the corresponding token in the comma separated list.
178: .TP
179: .BI #undef " name"
180: Causes the definition of
181: .I name
182: (if any) to be forgotten from now on.
183: .TP
184: \fB#include\fI "filename"
185: .PD 0
186: .TP
187: .BI #include " " < filename >
188: Include at this point the contents of
189: .I filename
190: (which will then be run through
191: .IR mc68cpp ).
192: When the
193: .BI < filename >
194: notation is used,
195: .I filename
196: is only searched for in the standard places.
197: See the
198: .B \-I
199: option above for more detail.
200: .PD
201: .TP
202: \fB#line\fI integer-constant "filename"
203: Causes
204: .I mc68cpp
205: to generate line control information for the next pass of the
206: C compiler.
207: .I Integer-constant
208: is the line number of the next line
209: and
210: .I filename
211: is the file where it comes from.
212: If \fI"filename"\fR is not given, the current file name is unchanged.
213: .TP
214: .B #endif
215: .br
216: Ends a section of lines begun by a test directive
217: .RB ( #if ,
218: .BR #ifdef ,
219: or
220: .BR #ifndef ).
221: Each test directive must have a matching
222: .BR #endif .
223: .bp
224: .TP
225: .BI #ifdef " name"
226: The lines following will appear in the output if, and only if,
227: .I name
228: has been the subject of a previous
229: .B #define
230: without being the subject of an intervening
231: .BR #undef .
232: .TP
233: .BI #ifndef " name"
234: The lines following will not appear in the output if, and only if,
235: .I name
236: has been the subject of a previous
237: .B #define
238: without being the subject of an intervening
239: .BR #undef .
240: .SK
241: .TP
242: .BI #if " constant-expression"
243: Lines following will appear in the output if, and only if, the
244: .I constant-expression
245: evaluates to non-zero.
246: All binary non-assignment C operators, the
247: .B ?:
248: operator, the unary
249: .BR \(mi ,
250: .BR ! ,
251: and
252: .B ~
253: operators are all legal in
254: .IR constant-expression .
255: The precedence of the operators is the same as defined by the C language.
256: There is also a unary operator
257: .BR defined ,
258: which can be used in
259: .I constant-expression
260: in these two forms:
261: .BI defined " " ( " name " )
262: or
263: .BI defined " name" .
264: This allows the utility of
265: .BR #ifdef " and " #ifndef
266: in a
267: .B #if
268: directive.
269: Only these operators, integer constants, and names which
270: are known by
271: .I mc68cpp
272: should be used in
273: .IR constant-expression .
274: In particular, the
275: .B sizeof
276: operator is not available.
277: .TP
278: .B #else
279: Reverses the notion of the test directive which
280: matches this directive. So if lines previous to
281: this directive are ignored, the following lines
282: will appear in the output,
283: and vice versa.
284: .PP
285: The test directives and the possible
286: .B #else
287: directives can be nested.
288: .SH FILES
289: .TP 1.5i
290: /usr/include
291: standard directory for
292: .B #include
293: files
294: .SH SEE ALSO
295: .PP
296: dmdcc(1).
297: .br
298: m4(1) in the
299: \f2UNIX System V User's Reference Manual\f1.
300: .SH DIAGNOSTICS
301: .PP
302: The error messages produced by
303: .I mc68cpp\^
304: are intended to be self-explanatory. The line number and filename
305: where the error occurred are printed along with the diagnostic.
306: .SH WARNING
307: When newline characters were found in argument lists for macros
308: to be expanded, previous versions of
309: .I mc68cpp\^
310: put out the newlines as they were found and expanded.
311: The current version of
312: .I mc68cpp\^
313: replaces these newlines with blanks to alleviate problems that the
314: previous versions had when this occurred.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.