C#基础知识 - 什么是预处理(#define、#if)
1、《C# 指南 》中标识了如下预处理指令,依次理解演示。
#if
#else
#elif
#endif
#define
#undef
#warning
#error
#line
#region
#endregion
#pragma
#pragma warning
#pragma checksum

1、此四个指令组成一个系列
1、以 #if 指令开头的条件指令必须以 #endif 指令显式终止。
2、#if 、#else、#elif、#endif,允许基于“是否”“存在”一个或多个符号包括或排除代码。 这在条件编译调试版本的代码或编译特定配置的代码时会很有用。
3、仅可以使用运算符 ==(相等)和 !=(不相等)测试 true 或 false。
4、 可以使用运算符 && (and)、|| (or) 和 ! (not) 评估是否已经定义了多个符号。
2、此处演示#if、#endif,没有其他预编译指令时,可观察到MyTest处于未定义状态,那么#if(MyTest)下的语句不执行,不编译(代码处于灰色状态)

3、#if、#else、#elif、#endif,演示观察下,MyTest和MySign均处于未定义状态,可使用&&组成较复杂的条件编译。

4、与if、else、elif用法类似,同样是优先执行后,跳出if代码段。

1、#define定义符号。 将符号用作传递给 #if 指令的表达式时,该表达式的计算结果为 true
1、#define需要放在using之前使用
2、#define 指令不能用于声明常量值
#undef 允许定义符号,通过将该符号用作 #if 指令中的表达式,表达式将计算为 false。使用类似#define


2、 1、#define放在其他位置时
CS1032 不能在文件的第一个标记之后定义或取消定义预处理器符号
2、#define 指令不能用于声明常量值
CS1025 应输入单行注释或行尾


3、生成系统还会感知表示不同目标框架的预定义预处理器符号。
因此在创建面向多个.NET 实现或版本的应用程序时,预处理符号会很有用。
