天轰穿C#教程之#if、#elif、#else和#endif

  老田:但看这个申明符号确实没有什么用。不过当它和#if、#elif、#else、#endif这些预处理指令结合起来之后,它的功能就非常强大了。

  

  来看个示例:

  

  #define debug  //尝试注释和取消注释这一句,然后运行程序看效果

  

  using System;

  

  using System.Collections.Generic;

  

  using System.Linq;

  

  using System.Text;

  

  namespace第二章_示例

  

  {

  

  classProgram

  

  {

  

  staticvoid Main(string[] args)

  

  {

  

  #if debug

  

  Console.WriteLine("确实申明了debug这个符号");

  

  Console.ReadLine();

  

  #else

  

  Console.WriteLine("切,都没有申明");

  

  Console.ReadLine();

  

  #endif

  

  }

  

  }

  

  }

  

  执行后效果如图2-6

  

  图2-6代码输入情况以及执行结果

  

  小天:上面示例演示的效果是,如果前面申明了debug这个符号,那么最终效果会显示"确实申明了debug这个符号",如果将前面申明符号的语句注释掉,则结果为"切,都没有申明"。可是,这能够说明什么呢?有什么用啊?

  

  老田:好好回忆下前面我们说的,是否是说预处理指令的作用就是影响编译器?换句话说,在上面你看到未显示的代码最终也不会被编译器编译。不会被编译到程序,那么程序的体积自然不会因为这段代码而增大了。

  

  另外需要注意的是,如果使用#if,那么一定记得使用#endif来关闭哦,因为编译器认为从#if开始后到#endif之间的代码都是属于#if或者#else的。如果忽略那一段,那么久"噢嘢"了。

  

  小天:明白了,娜还有个#elif是什么意思?

  

  老田:这不知道是哪个懒人发明的,#elif = else if 。同时,#if这系列判断也支持逻辑运算符!、==、!= 。下面我们来修改上面的代码。再申明一个符号debug1,下面的判断也增加一个,代码如下

  

  #define debug  //尝试注释和取消注释这一句,然后运行程序看效果

  

  #define debug1 //第二个示例用的

  

  using System;

  

  using System.Collections.Generic;

  

  using System.Linq;

  

  using System.Text;

  

  namespace第二章_示例

  

  {

  

  classProgram

  

  {

  

  staticvoid Main(string[] args)

  

  {

  

  #if debug  && debug1==false    //如果debug存在,同时debug1不存在

  

  Console.WriteLine("确实申明了debug这个符号");

  

  Console.ReadLine();

  

  #elif debug1  //如果debug不存在,而debug1存在

  

  Console.WriteLine("不错哦,又申明了一个");

  

  Console.ReadLine();

  

  #else//如果两个都不存在

  

  Console.WriteLine("切,都没有申明");

  

  Console.ReadLine();

  

  #endif

  

  }

  

  }

  

  }

  

  猜猜上面的代码会显示哪一个结果。

  

  本文为天轰穿原著,转载请注明出处及作者!

原文地址:https://www.cnblogs.com/thcjp/p/2714778.html