预处理器指令指导编译器在实际编译开始之前对信息进行预处理。

所有的预处理器指令都是以 # 开始。且在一行上,只有空白字符可以出现在预处理器指令之前。预处理器指令不是语句,所以它们不以分号(;)结束。

C# 编译器没有一个单独的预处理器,但是,指令被处理时就像是有一个单独的预处理器一样。在 C# 中,预处理器指令用于在条件编译中起作用。与 C 和 C++ 不同的是,它们不是用来创建宏。一个预处理器指令必须是该行上的唯一指令。

C# 预处理器指令列表

预处理器指令

描述

#define

它用于定义一系列成为符号的字符。

#undef

它用于取消定义符号。

#if

它用于测试符号是否为真。

#else

它用于创建复合条件指令,与 #if 一起使用。

#elif

它用于创建复合条件指令。

#endif

指定一个条件指令的结束。

#line

它可以让您修改编译器的行数以及(可选地)输出错误和警告的文件名。

#error

它允许从代码的指定位置生成一个错误。

#warning

它允许从代码的指定位置生成一级警告。

#region

它可以让您在使用 Visual Studio Code Editor 的大纲特性时,指定一个可展开或折叠的代码块。

#endregion

它标识着 #region 块的结束。

#define 预处理器

#define 预处理器指令创建符号常量。

#define 允许您定义一个符号,这样,通过使用符号作为传递给 #if 指令的表达式,表达式将返回 true。

#define PI
using System;
namespace PreprocessorDAppl
{
class Program
{
static void Main(string[] args)
{
#if (PI)
Console.WriteLine("PI is defined");
#else
Console.WriteLine("PI is not defined");
#endif
Console.ReadKey();
}
}
}

当上面的代码被编译和执行时,它会产生下列结果:

PI is defined

条件指令

您可以使用 #if 指令来创建一个条件指令。条件指令用于测试符号是否为真。如果为真,编译器会执行 #if 和下一个指令之间的代码。

条件指令的语法:

#if symbol [operator symbol]...

其中,symbol 是要测试的符号名称。您也可以使用 true 和 false,或在符号前放置否定运算符。

运算符符号是用于评价符号的运算符。可以运算符可以是下列运算符之一:

== (equality)
!= (inequality)
&& (and)
|| (or)

您也可以用括号把符号和运算符进行分组。条件指令用于在调试版本或编译指定配置时编译代码。一个以 #if 指令开始的条件指令,必须显示地以一个 #endif 指令终止。

#define DEBUG
#define VC_V10
using System;
public class TestClass
{
public static void Main()
{ #if (DEBUG && !VC_V10)
Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V10)
Console.WriteLine("VC_V10 is defined");
#elif (DEBUG && VC_V10)
Console.WriteLine("DEBUG and VC_V10 are defined");
#else
Console.WriteLine("DEBUG and VC_V10 are not defined");
#endif
Console.ReadKey();
}
}

当上面的代码被编译和执行时,它会产生下列结果:

DEBUG and VC_V10 are defined

最新文章

  1. 使用RBTool自动提交code review请求
  2. Qt Charts
  3. wpf 在引用外部的资源字典
  4. java 格式化代码 不进行换行
  5. Connecting Physics Bodies
  6. Android Call requires API level 11 (current min is 8)的解决方案
  7. (原)Eclipse中将JNI生成的so打包成jar的步骤
  8. [转]WIBKIT技术资料
  9. 如何使用OLAMI自然语言理解开放平台API制作自己的智能对话助手小程序
  10. 2017年Kali Linux更新源
  11. c# Cookie,Session,Application,Cache 四种缓存使用情景
  12. gerrit原理
  13. 支付宝&微信统一支付
  14. 如何在js中将统计代码图标隐藏
  15. Python的open函数文件读写线程不安全,logging模型文件读写线程安全!
  16. 微信小程序详解——页面之间的跳转方式【路由】和参数传递
  17. Windows下实现mysql定时备份
  18. 引用类型之object和date详解
  19. gh-ost原理
  20. centos6上使用fpm打python2.7 rpm包并兼容python2.6

热门文章

  1. Seaslog安装和参数配置
  2. golang ----gc问题
  3. Golang——垃圾回收GC(2)
  4. Socket网络编程--简单Web服务器(1)
  5. jpush在有网的情况下6002
  6. Android ShareUserId 使用总结
  7. 9patch图的尺寸尽量为偶数
  8. java 中使用log4j
  9. 如何在wiced平台上编译,运行智能彩灯 实时控制彩灯的色调和开关
  10. CLOS网络架构与FATTREE胖树拓扑