Jon Jagger
jon@jaggersoft.com
Table of Contents 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Notes DownloadECMA-334 C# Language Specificationpreviousnextprevious at this levelnext at this level 9 Lexical structureprevious at this levelnext at this level 9.5 Pre-processing directivesprevious at this levelnext at this level 9.5.3 Declaration directives Paragraph 11 The declaration directives are used to define or undefine conditional compilation symbols. pp-declaration :: whitespaceopt # whitespaceopt define whitespace conditional-symbol pp-new-line whitespaceopt # whitespaceopt undef whitespace conditional-symbol pp-new-line pp-new-line :: whitespaceopt single-line-commentopt new-line Paragraph 21 The processing of a #define directive causes the given conditional compilation symbol to become defined, starting with the source line that follows the directive. 2 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. Paragraph 31 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. 2 In intuitive terms, #define and #undef directives must precede any "real code" in the source file. [Example: The example:
#define Enterprise  
#if Professional || Enterprise  
#define Advanced  
#endif  
namespace Megacorp.Data  
{  
   #if Advanced  
   class PivotTable {...}  
   #endif  
}  
is valid because the #define directives precede the first token (the namespace keyword) in the source file. end example]
[Example: The following example results in a compile-time error because a #define follows real code:
#define A  
namespace N  
{  
   #define B  
   #if B  
   class Class1 {}  
   #endif  
}  
end example]
Paragraph 41 A #define may define a conditional compilation symbol that is already defined, without there being any intervening #undef for that symbol. [Example: The example below defines a conditional compilation symbol A and then defines it again.
#define A  
#define A  
For compilers that allow conditional compilation symbols to be defined as compilation options, an alternative way for such redefinition to occur is to define the symbol as a compiler option as well as in the source. end example] Paragraph 51 A #undef may "undefine" a conditional compilation symbol that is not defined. [Example: The example below defines a conditional compilation symbol A and then undefines it twice; although the second #undef has no effect, it is still valid.
#define A  
#undef A  
#undef A  
end example]
{ JSL }
Jagger Software Ltd
Company # 4070126
VAT # 762 5213 42
Valid HTML 4.01Valid CSS