在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
介绍 预处理指令是由编译器解释的命令,并影响输出或生成过程中的行为. 使用术语“预处理指令”只是为了与 C 和 C++ 编程语言保持一致。在 C# 中没有单独的预处理步骤,不像C和C++中,你不可以使用这些指令创建宏。预处理指令总是占用源代码中的单独一行,并且总是以 # 字符和预处理指令名称开头。# 字符的前面以及 # 字符与指令名称之间可以出现空白符。 接下来我们看看有关以下 C# 预处理器指令的信息: #IF 如果 C# 编译器遇到最后面跟有 #endif 指令的 #if 指令,则仅当指定的符号已定义时,它才会编译这两个指令之间的代码。 #Else #else 允许您创建复合条件指令,因此,如果前面的 #if 或(可选)#elif 指令中的任何表达式都不为 true,则编译器将计算 #else 与后面的 #endif 之间的所有代码。 #Elif #elif 使您得以创建复合条件指令。如果前面的 #if 和前面的任何 #elif(可选)指令表达式的计算结果都不是 true,则将计算 #elif 表达式。如果 #elif 表达式计算为 true,编译器将计算位于 #elif 和下一个条件指令之间的所有代码。 #Endif #endif 指定以 #if 指令开头的条件指令的结尾 #Define #define 可让您定义符号。 当您将符号用作传递给 #if 指令的表达式时,此表达式的计算结果为 true 注意:不能像在 C 和 C++ 中的通常做法一样,使用 #define 指令来声明常数值。最好是将 C# 中的常数定义为类或结构的静态成员。如果具有多个像这样的常数,可以考虑创建一个单独的“Constants”类来保存这些常数。 针对以上指令我们提供一段代码: 如上所示:由于DEBUG 和 MYTEST都定义了,所以,如下代码 #elif (DEBUG && MYTEST) Console.WriteLine("DEBUG and MYTEST are defined"); 高亮显示可用,其他行代码置灰。 运行结果: #Undef 示例代码: #define DEBUG #undef DEBUG using System; class MyClass { static void Main() { #if DEBUG Console.WriteLine("DEBUG is defined"); #else Console.WriteLine("DEBUG is not defined"); #endif } } 运行结果: #Warning #define DEBUG class MainClass { static void Main() { #if DEBUG #warning DEBUG is defined #endif } } #Error #error使您可以从代码中的特定位置生成错误。例如: #define DEBUG class MainClass { static void Main() { #if DEBUG #error DEBUG is defined #endif } } #Region #region 是大家最为熟悉的指令,它使您可以在使用 Visual Studio 代码编辑器的大纲显示功能时指定可展开或折叠的代码块。 在较长的代码文件中,能够折叠或隐藏一个或多个区域会十分便利,这样,您可将精力集中于当前处理的文件部分。 下面的示例演示如何定义区域: #region MyClass definition public class MyClass { static void Main() { } } #endregion #region 块必须以 #endregion 指令终止。 #endregion #endregion 标记 #region 块的结尾 #line 输出结果: 备注 示例 1 #pragma #pragma 为编译器提供特殊的指令,以说明如何编译包含杂注的文件。 这些指令必须是编译器支持的指令。 也就是说,不能使用 #pragma 创建自定义预处理指令。Microsoft C# 编译器支持以下两个 #pragma 指令: 在日常开发的过程中我们总是会经常对代码进行编译,而在编译的过程中会出现许多信息,许多无用的警告信息总是会在编译过程中提示出来,以干扰一些主要的警告,对此也是可以通过预处理器指令来进行关闭来阻止其显示。
在创建的项目中,打开“输出”窗口(这样可以查看输出的警告编号:如(CS0414)):Debug->Windows->Output,如下图所示:
然后我们做个测试: using System; class MainClass { static void Main() { int i = 5; Console.ReadLine(); } } public class test { int i = 10; } 对于如上代码,经过编译后出现如下类似警告:“变量i被分配,但从来没有使用过它的值”。 如果我们不想显示这些警告,可通过:#pragma warning disable 警告编号1, 警告编号2,来消除。 #pragma warning disable 0219,0414 using System; class MainClass { static void Main() { int i = 5; Console.ReadLine(); } } public class test { int i = 10; } 编译项目查看输出结果: 没有警告了。 如果我们又想显示CS0414怎么办呢? #pragma warning disable 0219,0414 using System; class MainClass { static void Main() { int i = 5; Console.ReadLine(); } } #pragma warning restore 0414 public class test { int i = 10; } 编译项目,查看输出结果: CS0414警告又显示出来了。 #pragma checksum 关于#pragma checksum指令我没能理解,google了一下也没找到相关示例。 这里给出MSDN链接:http://msdn.microsoft.com/zh-cn/library/vstudio/ms173226.aspx 大家可以自行参考,希望熟悉的朋友可以给出解释和示例,帮助大家。
|
请发表评论