本文转载自:http://www.cnblogs.com/miffylf/p/4005223.html

C#有许多名为预处理器指令的命令。这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各个方面。

例如,使用预处理器指令可以禁止编译器编译代码的某工部分。如果计划发布两个版本的代码,即基本版本和拥有更多功能的企业版本,

就可以使用这些预处理器指令。在编译软件的基本版本时,使用预处理器指令可以禁止编译器编译

与额外功能相关的代码。另外,在编写提供调试信息的代码时,也可以使用预处理器指令。

#define和#undef

#define的用法如下所示:

#define DEBUG
它告诉编译器存在给定名称的符号,在本例中是DEBUG。这有点类似于声明一个变量,但这
个变量并没有真正的值,只是存在而己。这个符号不是实际代码的一部分,而只在编译器编译代码
时存在。在C#代码中它没有任何意义。
#undef正好相反——它删除符号的定义:

#undef DEBUG
如果符号不存在,#undef就没有任何作用。同样,如果符号已经存在,则#define也不起作用。
必须把#define和#undef命令放在C#源文件的开头位置,在声明要编译的任何对象的代码之前。
#define本身并没有什么用,但与其他预处理器指令(特别是(#if)) 结合使用时,它的功能就非常强
大了。

#if,#elif,#else和#endif

这些指令告诉编译器是否要编译某个代码块。考虑下面的方法:
int DosomeWork(double x)
{
// do something
#if DEBuG
Console.WriteLine("x is " + x)`
#endif
}

这段代码会像往常那样编译,但Console .WriteLin()命令包含在#if子句内。这行代码只有在前面
的#define命令定义了符号DEBUG后才执行。当编译器遇到#if后,将先检查相关的符号是否存在,如果符号存在,就编译#if子句中的代码。否则,编译器会忽略所有的代码,直到遇到匹配的#endif指令为止。一般是在调试时定义符号DEBUG,把与调试相关的代码放在#if子句中。在完成了调试后,就把#define语句注释掉,所有的调试代码会奇迹般地消失,可执行文件也会变小,最终用户不会被这些调试信息弄糊涂(显然,要做更多的测试,确保代码在没有定义DEBUG的情况下也能工作。这项技术在C和C++编程中十分常见,称为条件编译(conditional compilation)#elif(= else if)和#else指令可以用在#if块中,其含义非常直观。也可以嵌套#if块:

#define ENTERPRIsE
#define W2K
// further on in the file 
#if ENTERPRISE
// do something
#if W2K
// some code that is only relevant to enterprise
// edition running on W2K
#endif
#elif PROFESSIONAL
// do something else
#else
// code for the leaner version
#endif

#warning和#error

另两个非常有用的预处理器指令是#warning和#error,当编译器遇到它们时,会分别产生警告或
错误。如果编译器遇到#warning指令,会给用户显示#warning指令后面的文本,之后编译继续进行。
如果编译器遇到#error指令,就会给用户显示后面的文本,作为一条编译错误消息,然后会立即退
出编译,不会生成IL代码。

#region 和#endregion

#region 和#endregion指令用于把一段代码标记为有给定名称的一个块。

#line

#line指令可以用于改变编译器在警告和错误信息中显示的文件名和行号信息。这条指令用得并
不多。如果编写代码时,在把代码发送给编译器前,要使用某些软件包改变输入的代码,就可以使
用这个指令,因为这意味着编译器报告的行号或文件名与文件中的行号或编辑的文件名不匹配。

#program


#program指令可以抑制或还原制定的编译警告。于命令行选项不同,#program指令可以在类或方法级别执行,对抑制警告的内容和抑制更精细的控制。

C#预处理器指令【转】的更多相关文章

  1. C#预处理器指令 ,你造吗??? (●'◡'●)

    什么是c#预处理指令?? 用于在 C# 源代码中嵌入的编译器命令. C#预处理器指令有哪些?? ↓↓↓这些就是预处理器指令啦 下面我们一一道来(●'◡'●) 1.#if ,#elif,#else,en ...

  2. C#预处理器指令

    在C#中有许多名为“预处理指令”的命令,这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各个方面.例如,使用预处理器指令可以禁止编译器编译代码的某一部分.如果计划发布两个版本的代码,即基本 ...

  3. 一些C#预处理器指令

    像C语言一样,C#有一些预处理器指令的命令.例如,#if#end if,#define等,所谓这些命令是指不会转化为可执行代码中的一些命令,只是在编译的过程中起作用.下面简要介绍一下:1 .#defi ...

  4. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  5. C#中的预处理器指令

    C#中有许多名为“预处理器指令”的命令.这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各个方面. 例如,使用预处理器指令可以禁止编译器编译代码的某一部分.如果计划发布两个版本的代码,即基 ...

  6. C#变量、常量、枚举、预处理器指令知多少

    一.变量 C#共有其中变量类型有:静态变量.实类变量.数组元素.数值参数.引用参数.输出参数和局部变量 先定义一个简单的类来说明,如下: public class VariableDefine { p ...

  7. [No0000FC]C# 预处理器指令

    预处理器指令指导编译器在实际编译开始之前对信息进行预处理. 所有的预处理器指令都是以 # 开始.且在一行上,只有空白字符可以出现在预处理器指令之前.预处理器指令不是语句,所以它们不以分号(;)结束. ...

  8. 雷林鹏分享:C# 预处理器指令

    C# 预处理器指令 预处理器指令指导编译器在实际编译开始之前对信息进行预处理. 所有的预处理器指令都是以 # 开始.且在一行上,只有空白字符可以出现在预处理器指令之前.预处理器指令不是语句,所以它们不 ...

  9. c#常用的预处理器指令

    预处理器指令指导编译器在实际编译开始之前对信息进行预处理.所有的预处理器指令都是以 # 开始. #define 预处理器指令创建符号常量.#define 允许您定义一个符号,这样,通过使用符号作为传递 ...

随机推荐

  1. 添加用户username到sudo组

    添加用户username到sudo组: usermod -aG sudo username USERMOD(8) 系统管理命令 USERMOD(8) 名 usermod - 修改一个用户账户 大 us ...

  2. python修饰器各种实用方法

    This page is meant to be a central repository of decorator code pieces, whether useful or not <wi ...

  3. PHP Warning: preg_match(): JIT compilation failed: no more memory in

    PHP7.3出现如下错误:PHP Warning: preg_match(): JIT compilation failed: no more memory in ... 解决方案: 修改 /usr/ ...

  4. springboot中的日志配置

    日志方式:每天日志存放在一个文件中,info和warn日志存放一个文件,error存放一个文件 创建文件 logback-spring.xml <?xml version="1.0&q ...

  5. 搭建基于HTTP协议内网yum仓库

    目录 1. 前言 2. 把rpm包下载到本地 3. 配置nginx对外提供服务 4. 配置本地repo文件 5. 生成repodata信息 6. 检查及使用 7. 对管理机器上的仓库进行更新 参考资料 ...

  6. 2018-2019-2 网络对抗技术 20165324 Exp5:MSF基础应用

    2018-2019-2 网络对抗技术 20165324 Exp5:MSF基础应用 MSF基础知识: MSF基础框架: 主要模块模块(Module).模块是指Metasploit框架中所使用的一段软件代 ...

  7. testng入门教程3用TestNG执行case的顺序

    本教程介绍了TestNG中执行程序的方法,这意味着该方法被称为第一和一个接着.下面是执行程序的TestNG测试API的方法的例子. 创建一个Java类文件名TestngAnnotation.java在 ...

  8. 020-安装centos6.5后的生命历程

    01.配置网络.修改了ifcfg-eth0文件内容. 1)ifcfg-eth0原来的内容如下: 2)ifcfg-eth0配置后的内容如下:   3)然后重启网络服务: 4)测试网络是否可通: 5)查看 ...

  9. Codeforces Round #246 (Div. 2) D E

    这题说的是给了一个字符串当前缀和后缀相同的时候就计算此时的 整个串种拥有这样的子串友多少个,没想到用KMP解 用0开头的那种类型的 KMP 今天刚好也学了一下,因为KMP的作用是找出最长前缀 KMP ...

  10. IOS中position:fixed吸底时的滑动出现抖动的解决方案

    H5方法: //吸顶头部 .header{ width:100%; height:50px; position:fixed; top:0px; } //main滑动区域 .main{ width:10 ...