编程语言
594
预处理指令的作用主要是向编译器发出指令,以便在程序编译开始之前对信息进行一些预处理操作。在 C# 中,预处理器指令均以#
开头,并且预处理器指令之前只能出现空格不能出现任何代码。另外,预处理器指令不是语句,因此它们不需要以分号;
结尾。
在 C# 中,预处理指令用于帮助条件编译。不同于 C 和 C++ 中的指令,在 C# 中不能使用这些指令来创建宏,而且预处理器指令必须是一行中唯一的代码,不能掺杂其它。
C# 中的预处理器指令
下表中列出了 C# 中提供的预处理器指令:
预处理器指令 | 描述 |
---|---|
#define | 用于定义一系列字符,可以将这些字符称为符号 |
#undef | 用于取消一个已定义符号 |
#if | 用于测试符号是否为真 |
#else | 用于创建复合条件指令,与 #if 一起使用 |
#elif | 用于创建复合条件指令 |
#endif | 指定一个条件指令的结束 |
#line | 用于修改编译器的行数以及(可选地)输出错误和警告的文件名 |
#error | 用于在代码的指定位置生成一个错误 |
#warning | 用于在代码的指定位置生成一级警告 |
#region | 用于在使用 Visual Studio Code Editor 的大纲特性时,指定一个可展开或折叠的代码块 |
#endregion | 用于标识 #region 块的结束 |
#define 预处理器
#define 预处理器指令用来创建符号常量,这个符号可以作为传递给 #if 指令的表达式,表达式将返回 true。#define 的语法格式如下:
#define symbol
下面通过示例来演示 #define 预处理器指令的使用:
#define PI using System; namespace hello { class Demo { static void Main(string[] args) { #if (PI) Console.WriteLine("PI 已定义"); #else Console.WriteLine("PI 未定义"); #endif Console.ReadKey(); } } }
运行结果如下:
PI 已定义
条件指令
您可以使用 #if 来创建条件指令,条件指令可以用于测试一个或多个符号的值是否为 true 。如果符号的值为 true,那么编译器将评估 #if 指令和下一个指令之间的所有代码。在语法上 #if 预处理器语句与 C# 中的 if 条件判断语句比较相似,如下所示:
#if symbol_1 // 要执行的代码 #elif symbol_2 // 要执行的代码 #else // 要执行的代码 #endif
其中,symbol 是要测试的符号的名称。
条件指令中仅可以使用运算符==
(相等)和!=
(不相等)来测试布尔值 true 或 false,例如 true 表示已定义该符号。另外,还可以使用&& (and)
、|| (or)
和! (not)
运算符来同时测试多个符号,以及使用括号对符号和运算符分组。
注意:以 #if 指令开头的条件指令必须以 #endif 指令显式结束。
下面通过示例来演示条件指令的使用:
#define DEBUG #define VC_V10 using System; namespace world { class Demo { static void Main(string[] args) { #if (DEBUG && !VC_V10) Console.WriteLine("DEBUG 已定义"); #elif (!DEBUG && VC_V10) Console.WriteLine("VC_V10 已定义"); #elif (DEBUG && VC_V10) Console.WriteLine("DEBUG and VC_V10 已定义"); #else Console.WriteLine("DEBUG and VC_V10 未定义"); #endif Console.ReadKey(); } } }
运行结果如下:
DEBUG and VC_V10 已定义