尽管C#编译器没有单独的预处理器,但描述的指令的处理方式与有预处理器时是一样的。这些指令用于帮助条件编译。而不同于 C 和 C++ 指令,不能使用这些指令来创建宏。预处理器指令必须是一行中唯一的说明。
工具/原料
visual studio 2015
1、《C# 指南 》中标识了如下预处理指令,依次理解演示。#if#else#elif#endif#define#undef#warning#error#line#region#endregion#pragma#pragma warning#pragma checksum
“#if、#else、#elif、#endif”
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代码段。
#define #undef
1、#define定义符号。将符号用作传递给#if指令的表达式时,该表达式的计算结果为true1、#define需要放在using之前使用2、#define指令不能用于声明常量值#undef允许定义符号,通过将该符号用作#if指令中的表达式,表达式将计算为false。使用类似#define
2、#define放在其他位置时CS1032 不能在文件的第一个标记之后定义或取消定义预处理器符号2、#define指令不能用于声明常量值CS1025 应输入单行注释或行尾
3、生成系统还会感知表示不同目标框架的预定义预处理器符号。因此在创建面向多个.NET 实现或版本的应用程序时,预处理符号会很有用。