C#预处理
C#预处理阶段是一个文本到文本的转换阶段,在预处理过程中,使能进行代码的条件包含和排除。
- pp-un it:
- pp-gro up opt
- pp-gro up:
- pp-gro up-part
- pp-gro up pp-group-part
- pp-gro up-part:
- pp-tokensopt new-line
- pp-de claration
- pp-if -section
- pp-con trol-line
- pp-l ine-number
- pp-tokens:
- pp-token
- pp-tokens pp-token
- pp-token:
- identifi er
- keyword
- literal
- operator-or-punctuator
- new-line:
- The carriage return character (U+000D)
- The line feed character (U+000A)
- The carriage return character followed by a line feed character
- The line separator character (U+2028)
- The paragraph separator character (U+2029)
C#预处理声明
在预处理过程中,为了使用名称可以被定义和取消定义。#define 定义一个标识符。#undef “反定义”一个标识符,如果一个标识符在以前已经被定义了,那么它就变成了不明确的。如果一个标识符已经被定义了,它的语意就等同于true ;如果一个标识符没有意义,那么它的语意等同于false.
- pp-de claration:
- #define pp-identifier
- #undef pp-identifier
来看看这个例子:
- #define A
- #undef B
- class C
- {
- #if A
- void F()
- #else
- void G()
- #endif
- #if B
- void H()
- #else
- void I()
- #endif
- }
- 变为:
- class C
- {
- void F()
- void I()
- }
如果有一个pp-unit, 声明就必须用pp- token 元素进行。换句话说,#define 和#undef 必须在文件中任何 “真正代码”前声明,否则在编译时会发生错误。因此,也许会像下面的例子一样散布#if 和#define:
- define A
- #if A
- #define B
- #endif
- namespace N
- {
- #if B
- class Class1
- #endif
- }
因为#define 放在了真实代码后面,所以下面的例子是非法的:
- #define A
- namespace N
- {
- #define B
- #if B
- class Class1
- #endif
- }
以上介绍C#预处理
【编辑推荐】