标签:
C#预处理器指令不会转化为可执行代码的命令,但是会影响编译过程的各个方面。
比如当计划发布两个版本的代码的时候。即基本版和拥有更多版本的企业版,就可以用到预处理器指令,
在编译基本版的时候,使用预处理指令会禁止编译器编译与额外功能相关的代码。
在编写提供调试信息的代码时,也可以使用预处理器指令
常用的预处理指令不多,我们举个简单的例子,具体解释和语法,可以参见MSDN帮助文档
首先,编写下列代码
using System; namespace ConsoleApplication { class Program { static void Main() { Console.WriteLine("调试状态"); Console.WriteLine("跟踪状态"); Console.WriteLine("运行状态"); Console.WriteLine("请输入一个数字:"); var num = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("C#基本语法:您输入的数字是:{0}", num); } } }
运行后效果如下:
如果使用预处理器指令,在代码最上方加入指令
#define DEBUG #define TRACE
然后,分别在调试和跟踪的位置添加判断
#define DEBUG #define TRACE using System; namespace ConsoleApplication { class Program { static void Main() { #if DEBUG Console.WriteLine("调试状态"); #elif TRACE Console.WriteLine("跟踪状态"); #else Console.WriteLine("运行状态"); Console.WriteLine("请输入一个数字:"); var num = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("C#基本语法:您输入的数字是:{0}", num); #endif } } }
此时,只有调试状态的代码可以正常执行,如果使用#undef取消定义,那么,就分别可以指定运行的代码段,如
#define DEBUG #define TRACE #undef DEBUG #undef TRACE using System; namespace ConsoleApplication { class Program { static void Main() { #if DEBUG Console.WriteLine("调试状态"); #elif TRACE Console.WriteLine("跟踪状态"); #else Console.WriteLine("运行状态"); Console.WriteLine("请输入一个数字:"); var num = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("C#基本语法:您输入的数字是:{0}", num); #endif } } }
还可以通过#warning或者#error指令来显示指定警告信息和错误信息
#warning 这里必须加防御式编码 var num = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("C#基本语法:您输入的数字是:{0}", num);
其中,警告可以通过编译,而错误则无法通过正常编译,效果如下所示:
可以在输出窗口获取警告的编号
在代码中通过#pragma来抑制当前警告或错误
#pragma warning disable 1030
最后,也是经常使用的,使用#region来实现代码区域分割
#region 这里是代码区域 Console.WriteLine("运行状态"); Console.WriteLine("请输入一个数字:"); #warning 这里必须加防御式编码 var num = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("C#基本语法:您输入的数字是:{0}", num); #endregion
完整程序代码如下:
#define DEBUG #define TRACE #undef DEBUG #undef TRACE #pragma warning disable 1030 using System; namespace ConsoleApplication { class Program { static void Main() { #if DEBUG Console.WriteLine("调试状态"); #elif TRACE Console.WriteLine("跟踪状态"); #else #region 这里是代码区域 Console.WriteLine("运行状态"); Console.WriteLine("请输入一个数字:"); #warning 这里必须加防御式编码 var num = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("C#基本语法:您输入的数字是:{0}", num); #endregion #endif } } }
标签:
原文地址:http://www.cnblogs.com/rammderek/p/4236766.html