登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天道酬勤 玩物丧志

用勇气去改变可以改变的事情,用胸怀去包容无法改变的事情,用智慧去判断两者的区别

 
 
 

日志

 
 

c# 条件编译 #define #if #endif  

2011-07-25 20:43:04|  分类: C#文件网络传输 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

注:在了解这部分之前,我也问了一部分人,都一致认为目前基本在c#不会用到这个。这块比如说在原来电脑内存比较小,而且有跨平台等操作这个比较多。

1:条件编译

条件编译属于编译预处理的范畴,与c++不同,c#没有独立的预处理器。C#中的预处理指令仅仅用来与c保持一致,而不是编译器开始编译代码之前得一个单独的处理步骤,他是作为词法分析的一部分来执行的。

Msdn关于条件编译的说明:

可以使用条件编译选择特定的代码节进行编译,而排除其他代码节。例如,可能需要编写调试语句来比较同一编程任务的不同方法的速度,或者可能需要本地化用于多种语言的应用程序。条件编译语句被设计为在编译时(而不是在运行时)运行。

2:条件编译指令 

条件编译指令有以下四种:#if#elif#else#endif

这些条件编译指令用来有条件的将部分程序段包括进来或排除在外。他们和c#中的if语句有类似的作用。

条件编译符号有两种可能的状态:已定义的或未定义的。在源文件词法处理开始时,条件编译符号除非已由外部机制(如命令行编译器选项)显式定义,否则是未定义的。

他们在程序中的出现的先后顺序必须是这样:

一条#if语句(必须有)

零或多条#elif语句

零或一条#else语句

一条#endif语句(必须有)

 

#if (Debug && !Mytest)

Console.WriteLine("Debug is defined");

#elif (!Debug && Mytest)

Console.WriteLine("Mytest is defined");

#elif (Debug && Mytest)

 Console.WriteLine("Debug and Mytest are defined");

 #else

Console.WriteLine("Debug and Mytest are not defined");

console.ReadLine(); 

#endif

3:Conditional

当调用标记为条件的方法时,指定的预处理符号的存在或不存在决定是否包含或省略此调用。如果定义了该符号,则包含调用;否则省略调用。使用 Conditional 是封闭 #if  #endif 内部方法的替代方法

classDebug

    {

        staticvoidMain(string[] args)

        {

            Print1();

            Print2();

            Print3();

            Console.ReadLine();

        }

 

        [Conditional("DEBUG")]

        staticvoid Print1()

        {

            Console.WriteLine("1111111111111111111111111111");            

        }

 

        //定义了debug或者trace后才执行

        //或者的关系

        [Conditional("DEBUG"), Conditional("Trace")]

        staticvoid Print2()

        {

            Console.WriteLine("222222222222222222222222");

        }

 

        //只有定义了DebugTrace后才会执行此方法

        [Conditional("DEBUGAndTrace")]

        staticvoid Print3()

        {

            Console.WriteLine("33333333333333333333333333333333");

     }

}

4:发出错误和警告信息

预编译和条件编译指令可以帮助我们在程序执行过程中发出编译的错误或警告,相应的指令时#warning#Error

 

#   程序员参考                   #define请参见       C#   预处理器指令   |   条件方法教程       #define   使您得以定义符号,这样,通过将该符号用作传递到   #if   指令的表达式,该表达式将计算为   true。             #define   symbol       其中:               symbol         要定义的符号名称。         备注       符号可用于指定编译的条件。可以用   #if   或   #elif   来测试符号。还可以使用   conditional   属性执行条件编译。             可以定义符号,但是无法对符号赋值。#define   指令必须在使用任何也不是指令的指令之前出现在文件中。             也可以用   /define   编译器选项定义符号。可以用   #undef   取消定义符号。             用   /define   或   #define   定义的符号与具有同一名称的变量不冲突。即,不应将变量名传递到预处理器指令,并且只能用预处理器指令计算符号。             用   #define   创建的符号的范围是在其中定义该符号的文件。             示例       有关如何使用   #define   的示例,请参见   #if。             请参见       C#   预处理器指令   |   条件方法教程
  评论这张
 
阅读(4302)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018