
9 Lexical structure
9.5 Pre-processing directives
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 AFor 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 Aend example]
| |
| Jagger Software Ltd | |
| Company # 4070126 | |
| VAT # 762 5213 42 |