ECMA-334 C# Language Specification9.5.3: Declaration directives |
The declaration directives are used to define or undefine conditional compilation symbols.
whitespace
opt #
whitespace
opt define
whitespace
conditional-symbol
pp-new-line
whitespace
opt #
whitespace
opt undef
whitespace
conditional-symbol
pp-new-line
whitespace
opt single-line-comment
opt new-line
The processing of a #define
directive causes the given conditional compilation symbol to become defined, starting with the source line that follows the directive. Likewise, the processing of an #undef
directive causes the given conditional compilation symbol to become undefined, starting with the source line that follows the directive.
Any #define
and #undef
directives in a source file must occur before the first token (9.4) in the source file; otherwise a compile-time error occurs. In intuitive terms, #define
and #undef
directives must precede any "real code" in the source file.
is valid because the
#define Enterprise
#if Professional || Enterprise
#define Advanced
#endif
namespace Megacorp.Data
{
#if Advanced
class PivotTable {...}
#endif
}
#define
directives precede the first token (the namespace keyword) in the source file. end example]
#define
follows real code:
end example]
#define A
namespace N
{
#define B
#if B
class Class1 {}
#endif
}
A #define
may define a conditional compilation symbol that is already defined, without there being any intervening #undef
for that symbol.
#define A
#define A
A #undef
may "undefine" a conditional compilation symbol that is not defined. #undef
has no effect, it is still valid.
end example]
#define A
#undef A
#undef A