Next: Preprocessing Tokens, Previous: Preproc Overview, Up: Preprocessing [Contents][Index]
Preprocessing directives are lines in the program that start with ‘#’. Whitespace is allowed before and after the ‘#’. The ‘#’ is followed by an identifier, the directive name. It specifies the operation to perform. Here are a couple of examples:
#define LIMIT 51 # undef LIMIT # error You screwed up!
We usually refer to a directive as #name
where name
is the directive name. For example, #define
means the
directive that defines a macro.
The ‘#’ that begins a directive cannot come from a macro
expansion. Also, the directive name is not macro expanded. Thus, if
foo
is defined as a macro expanding to define
, that does
not make #foo
a valid preprocessing directive.
The set of valid directive names is fixed. Programs cannot define new preprocessing directives.
Some directives require arguments; these make up the rest of the
directive line and must be separated from the directive name by
whitespace. For example, #define
must be followed by a macro
name and the intended expansion of the macro.
A preprocessing directive cannot cover more than one line. The line can, however, be continued with backslash-newline, or by a ‘/*…*/’-style comment that extends past the end of the line. These will be replaced (by nothing, or by whitespace) before the directive is processed.