第23章 预处理指令
本章讲解的是预处理指令,它是类似于C和C++中预处理机制的一种类似实现,或者说简化版本。因为在C和C++中有单独的预处理器,而C#中并没有,预处理不是编译器开始编译代码之前的一个单独的处理步骤,这项工作也是由编译器来做的。我们先介绍C#中的预处理指令集,并学习这些指令的使用场景和方法。由于C#和C的预处理机制既相似,又不同,我们不妨先介绍C中的预处理指令,作为一个扩展知识点,对比学习。
C语言中的预处理机制说明如下:
❑预处理不属于C语言本身的一部分,而在程序编译之前就要完成预处理;
❑预处理一般来说有三种功能:宏定义,文件包含和条件编译;
❑预处理的本质是将特定的代码加载到源程序中,宏定义的功能是替换,文件包含的功能是将所要包含的文件加载到预处理定义的部分,而条件编译功能则指示是否将某段程序编译,本质上就是将需要的程序进行编译,而不需要的程序不编译。
可见,C#中的预处理机制仅具有C语言中的条件编译功能。
23.1 什么是预处理指令
预处理指令不会出现在编译后的CIL(Intermediate Language,中间语言)代码中,它主要是控制编译的过程。例如,使用预处理指令可以实现只有在调试模式下,才包括输出调试信息的代码(编译的时候包括调试相关的代码,并不等到运行的时候)。所谓调试模式,也仅仅是定义一个表示调试的指令而已。
预处理指令集中,除了#region和#endregion这两个指令以外,一般都只在编译时工作,因为这两个指令不会对代码的编译产生任何影响,仅仅是在IDE的代码编辑器中定义一个可折叠的区域。