C#预处理指令

预处理指令简介

微软对预处理指令解释链接
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/preprocessor-directives/index
预处理指令不会转化为可执行代码中的命令,但会影响编译过程的各个方面。例如使用预处理指令可以禁止编译器编译代码的某一部分。
预处理器指令的开头都有符号#

#define、#undef

#define的用法如下所示:

#define DEBUG

它告诉编译器存在给定名称的符号,在本例中是DEBUG。这有点类似于声明的一个变量,但这个变量并没有真正的值,只是存在而已。这个符号不是实际代码的一部分,而只在编译器编译代码时存在。在C#代码中它没有任何意义。
#undef 删除符号的定义:

#undef DEBUG

如果符号不存在,#undef就没有任何作用。同样如果符号已经存在,则define也不起作用。
必须把#define和#undef命令放在C#文件的开头位置,在声明要编译的任何对象的代码之前。

#if、#elif、#else、#endif

#if与#endif

# if DEBUG
。。。。。。。代码
# endif

包含在#if与#endif之间代码只有在定义了符号DEBUG后才会执行,否则将会忽略代码。

#elif(=else if)、#else
这两个预处理指令就和if/else的指令用法一样。
#if与#elif还支持一组逻辑运算符操作,“!”、“==”、“!=”、“||”。如果符号存在认为是true否则为false。

#warning、#error

当编译器遇到这两个指令时,会分别产生警告或错误。

  • 如果编译器遇到#warning指令,会向用户显示#warning指令后边的文本,之后编译继续进行。
  • 如果编译器遇到#error指令,会向用户显示#error指令后边的文本,作为一条编译错误消息,然后会立即退出编译,不会生成IL代码。

#region、#endregion

#region和#endregion指令用于把一段代码视为有给定名称的一个块

#region 代码片名称
在这里插入代码片
#endregion

在vs中使用#region和#endregion指令的块可以被折叠。这样代码布局看起来更合理。

#line、#line default

#line指令可以用于改变编译器在警告和错误信息中显示的文件名和行号信息。这条指令用的并不多。
#line default把行号还原为默认的行号

#pragma

#pragma指令可以抑制或者还原指定的编译警告。与命令行选项不同,#pragma指令可以在类或方法级别实现,对抑制警告的内容和抑制的时间进行更精细的控制。
下边的例子禁止字段未使用警告,然后在编译MyClass类后还原警告:

#pragma warning disable 169
public class MyClass
{
int A=1}
#pragma warning restore 169
发布了156 篇原创文章 · 获赞 222 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章