码迷,mamicode.com
首页 > Windows程序 > 详细

C#预处理器指令

时间:2015-01-20 20:06:35      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

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
        }
    }
}

 

C#预处理器指令

标签:

原文地址:http://www.cnblogs.com/rammderek/p/4236766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!