? C# 中没有实际的预处理程序,“预处理”指令由编译器处理,但这个术语被保留了下来。
? 表 24.1 列出了预处理指令。
? 编译符号是只有两种可能状态的标识符,要么被定义,要么未被定义。其具有如下特性:
? #define 和 #undef 只能用在源文件的第一行,即任何 C# 代码之前。
? 重复定义已存在的编译符号是被允许的。
? 定义一个标识符相当于将其值设置为 true,取消定义一个标识符相当于设置其值为 false。
? 条件编译允许根据某个编译符号是否被定义,来标注一段代码是否被编译或跳过。
? #if 和 #endif 需要配对使用,有 #if 指令,则必须有配对的 #endif 指令。
#if 和 #if … #else 结构
#if … #elif 和 #if … #elif … #else
? 诊断指令产生用户自定义的编译时警告及错误消息,其语法如下。需要注意,Message 是字符串,但不需要被引号包围。
? 当编译器遇到诊断指令时,会输出相关消息。诊断指令的消息会和编译器产生的警告和错误消息列在一起。
? 行号指令可以做如下事情:
? 例如:
? 区域指令允许标注和有选择性地命名一段代码。区域由一个 #region 指令和其下方某处的一个 #endregion 指令构成。区域功能能够更轻松地浏览和组织代码。
? 例如,下面的代码定义了区域 Constructors,包含 2 个构造函数 MyClass。如果不想查看其中的代码,可以在 Rider 中将其折叠为一行。
? 使用 #pragma warning 指令可以关闭或重新开启警告消息。
关闭/开启特定警告消息
? 例如,下面的代码关闭 2 个警告消息 618 和 414,之后又开启了 618 警告消息。
关闭/开启所有警告消息
? 若不带任何数字列表,则命令会应用于所有警告。