|
|
1.1 root 1:
2:
3: C preprocessor Overview C preprocessor
4:
5:
6:
7:
8: Preprocessing encompasses all tasks that logically precede the
9: translation of a program. The preprocessor processes headers,
10: expands macros, and conditionally includes or excludes source
11: code.
12:
13: ***** Directives *****
14:
15: The C preprocessor recognizes the following directives:
16:
17:
18: #iiff Include code if a condition is true
19: #eelliiff Include code if directive is true
20: #eellssee Include code if preceding directives fail
21: #eennddiiff End of code to be included conditionally
22:
23:
24:
25: #iiffddeeff Include code if a given macro is defined
26: #iiffnnddeeff Include code if a given macro is not defined
27:
28:
29:
30: #ddeeffiinnee Define a macro
31: #uunnddeeff Undefine a macro
32: #iinncclluuddee Read another file and include it
33: #lliinnee Reset current line number
34:
35:
36: A preprocessing directive is always introduced by the `#' charac-
37: ter. The `#' must be the first non-white space character on a
38: line, but it may be preceded by white space and it may be
39: separated from the directive name that follows it by one or more
40: white space characters.
41:
42: ***** Preprocessing Operators *****
43:
44: The Standard defines two operators that are recognized by the
45: preprocessor: the ``stringize'' operator #, and the ``token-
46: paste'' operator ##.
47:
48: The operator # indicates that the following argument is to be
49: replaced by a string literal; this literal names the preproces-
50: sing token that replaces the argument. For example, consider the
51: macro:
52:
53:
54: #define display(x) show((long)(x), #x)
55:
56:
57: When the preprocessor reads the line
58:
59:
60:
61:
62:
63:
64: COHERENT Lexicon Page 1
65:
66:
67:
68:
69: C preprocessor Overview C preprocessor
70:
71:
72:
73: display(abs(-5));
74:
75:
76: it replaces it with the following:
77:
78:
79: show((long)(abs(-5)), "abs(-5)");
80:
81:
82: The ## operator performs ``token pasting'' -- that is, it joins
83: two tokens together, to create a single token. For example, con-
84: sider the macro:
85:
86:
87: #define printvar(x) printf("%d\n", variable ## x)
88:
89:
90: When the preprocessor reads the line
91:
92:
93: printvar(3);
94:
95:
96: it translates it into:
97:
98:
99: printf("%d\n", variable3);
100:
101:
102: In the past, token pasting had been performed by inserting a
103: comment between the tokens to be pasted. This no longer works.
104:
105: ***** Predefined Macros *****
106:
107: The ANSI Standard describes the following macros that must be
108: recognized by the preprocessor:
109:
110:
111: _ _DDAATTEE_ _Date of translation
112: _ _FFIILLEE_ _Source-file name
113: _ _LLIINNEE_ _Current line within source file
114: _ _SSTTDDCC_ _Conforming translator and level
115: _ _TTIIMMEE_ _Time of translation
116:
117:
118: For more information on any one of these macros, see its entry.
119:
120: ***** Conditional Inclusion *****
121:
122: The preprocessor will conditionally include lines of code within
123: a program. The directives that include code conditionally are
124: defined in such a way that you can construct a chain of inclusion
125: directives to include exactly the material you want.
126:
127:
128:
129:
130: COHERENT Lexicon Page 2
131:
132:
133:
134:
135: C preprocessor Overview C preprocessor
136:
137:
138:
139: ***** Macro Definition and Replacement *****
140:
141: The preprocessor performs simple types of macro replacement. To
142: define a macro, use the preprocessor directive #ddeeffiinnee _i_d_e_n_t_i_f_i_e_r
143: _v_a_l_u_e. The preprocessor scans the translation unit for
144: preprocessor tokens that match identifier; when one is found, the
145: preprocessor substitutes value for it.
146:
147: ***** cpp *****
148:
149: Under COHERENT, C preprocessing is done by the program cpp. The
150: cc command runs cpp as the first step in compiling a C program.
151: cpp can also be run by itself.
152:
153: cpp reads each input file; it processes directives, and writes
154: its product on ssttddoouutt.
155:
156: If the -E option is not used, cpp also writes into its output
157: statements of the form #lliinnee _n _f_i_l_e_n_a_m_e, so that the parser cc0
158: can connect its error messages and debugger output with the
159: original line numbers in your source files.
160:
161: See the Lexicon entry on cpp for more information.
162:
163: ***** See Also *****
164:
165: C language, cc, cpp
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196: COHERENT Lexicon Page 3
197:
198:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.