Preprocessor directives supply the compiler with additional information about regions of code. The most common preprocessor directives are the conditional directives, which provide a way to include or exclude regions of code from compilation. For example:
#define DEBUG class MyClass { int x; void Foo( ) { # if DEBUG Console.WriteLine("Testing: x = {0}", x); # endif ... }
In this class, the statement in Foo
is compiled as
conditionally dependent upon the presence of the
DEBUG
symbol. If we remove the
DEBUG
symbol, the statement is not compiled.
Preprocessor symbols can be defined within a source file (as we have
done), and they can be passed to the compiler with the
/define
: symbol command-line option. All
preprocessor symbols are implicitly true, so the
#define
statement in the previous example is
effectively the same as the following:
#define DEBUG = true
The #error
and #warning
symbols
prevent
accidental misuse of conditional
directives by making the compiler generate a warning or error given
an undesirable set of compilation symbols. See Table 4-3 for a list of preprocessor directives and
their actions.
Table 4-3. Preprocessor directives
Preprocessor directive |
Action |
---|---|
|
Defines |
|
Undefines |
|
|
|
Executes code to subsequent |
|
Combines |
|
Ends conditional directives. |
|
|
|
|
|
|
|
Marks the beginning of outline. |
|
Ends an outline region. |
Get C# in a Nutshell, Second Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.