C#C#预处理器指令 ,你造吗??? (●’◡’●)

什么是c#预处理指令??

用于在 C# 源代码中置放的编译器命令。

C#预处理器指令有什么??

↓↓↓这个就是预处理器指令啦

C# 1

 

下边大家一一道来(●’◡’●)

1.#if
,#elif,#else,endif 

c#编译的第2步就是预处理,这一步中,根据源程序中#开班的指令(预处理指令)进行拍卖。

例如:

C# 2

首先,预处理首先扫描到#define Debug1,预处理器得知你定义了Debug1
紧接着,预处理接着扫描到#if Debug1,因为已经定义了Debug1,所以这个条件成立,预处理器将
System.Console.WriteLine("我是Debug1(●'◡'●)")“抽取”,交给后续编译处理。
预处理器扫描到 #elif Debug2后 ,忽略了Console.WriteLine("Hello 我是 Debug2");.
扫描到#else 后,将忽略System.Console.WriteLine("啥都不是,所以输出我啦"); 这个语句,这两句都不交给编译器进行编译。
最终:
经过预处理后,只有System.Console.WriteLine("我是Debug1(●'◡'●)");语句被交给编译器处理生成代码;其他两句都没有交给编译器,被忽略了,因而不会生成代码。

备注:

结缘使用 #if 与 #else#elif#endif#define  #undef 指令,可以依据多少个或多少个标志是还是不是留存来含有或解除代码。在编译调试版本的代码或针对一定配置实行编译时,那会很有用。

以 #if 指令初始的规范指令必须用 #endif 指令显式终止。

 

2. #define ,# undef 指令

使用 #define 可以定义2个标志,并由此将该符号用作表明式传递给
#if一声令下,使该表明式的统计结果为 true

例如:

C# 3

备注:

可以定义符号,可是不可以对符号赋值。

#define 指令必须在拔取任何也不是命令的一声令下以前出现在文件中。#define
Debug1必须写在拥有using 此前

可以用#undef来撤消定义符号。

用 #define 创制的标志的界定是在内部定义该符号的文件。

 

#undef 使你可以废除符号的概念,以便通过将该符号用作#if一声令下中的表明式,使表明式的测算结果为 false

例如:

C# 4

 

3.#warning
生成警告,#error生成错误

包含#warning指令后,编译器会主动发警告。

包含#error指令后,编译器会主动发出错误。

例如:

C# 5

 

4.#pragma,#pragma warning

告诫可以指出代码中或然存在的难点,所以是很有用滴。可是,有的警告大家可以创造地忽视,所以有必不可少关闭掉它们。

采取预处理指令#pragma 禁用
#warning指令

例如:#pragma warning disable 1030

行使预处理命令#pragma 还原警告

再一次启用警告依旧是应用#pragma指令,只是在warning前面添加restore选项 

例如:#pragma warning restore 1030

上述两条指令正好可以将二个一定的代码块包围起来,前提是已知警告不适用于那一个代码块

例如:

C# 6

 

5.#line(其实就是改变代码的行号而已)

#line 使您可以修改编译器的行号以及(可选)错误和警示的文书名输出。下边的言传身教表明什么报告与行号关联的八个警示。#line 200 指令强迫行号为
200(尽管默许值为 #7)。另一行 (#9)
作为暗中同意 #line 指令的结果跟在经常序列后。

C# 7

(下边那段备注摘自:https://msdn.microsoft.com/zh-cn/library/34dk387t(v=vs.80).aspx)

备注:

#line 指令只怕由生成进程中的自动中间步骤使用。例如,假若行从原本的源代码文件中移除,然而你仍愿意编译器基于文件中的原始行号生成输出,则足以移除行,然后用 #line 模拟原始行号。

#line
hidden
 指令对调试器隐藏若干总是的行,那样当开发人士在逐句通过代码时,将会跳过 #line
hidden
 和下两个 #line 指令(假定它不是另五个 #line
hidden
 指令)之间的保有行。此选项也可用来使 ASP.NET
可以区分用户定义的代码和总括机生成的代码。即使 ASP.NET
是此成效的重大使用者,但很大概将有越来越多的源生成器使用它。

#line
hidden
 指令不会潜移默化错误报告中的文件名或行号。即,即使在隐藏块中蒙受错误,编译器将报告当前文件名和错误的行号。

#line
filename
 指令指定您希望出现在编译器输出中的文件名。暗中认同情状下,使用源代码文件的其实名称。文件名必须括在双引号
(“”) 中。

源代码文件可以享有 #line 指令的任何编号。

 

6.#region ,#endregion

#region#endregion,就是把代码块折叠恐怕举办,#region前面加上表明的文字,当这组代码被折叠起来的时候,大家得以见到#region末尾的申明文字

例如:

C# 8

C# 9

备注

 #region 块必须以
#endregion一声令下终止。

#region 块不可以与
#if块重叠。但是,可以将 #region 块嵌套在 #if 块内,或将 #if 块嵌套在 #region 块内。

 

(上边那段摘自:https://msdn.microsoft.com/zh-cn/library/ms173226(v=vs.80).aspx)

**7.#pragma checksum**

可用来生金敬道文件的校验和,以助手调节
ASP.NET 页。

#pragma checksum "filename" "{guid}" "checksum bytes"

参数

“filename”  

渴求蹲点更改或更新的公文的称谓。

“{guid}”  

文本的大局唯一标识符 (GUID)。

“checksum_bytes”  

十六进制数的字符串,表示校验和的字节。必须是偶数位的十六进制数。奇数位的数字会导致编译时告诫,从而使指令被忽略。

备注

Visual Studio
调试器使用校验和来保管找到的连天不错的源。编译器总结源文件的校验和,然后将出口发出到程序数据库
(PDB) 文件。最后,调试器使用 PDB 来相比较它为源文件统计的校验和。

此化解方案不适用于 ASP.NET 项目,因为算出的是浮动的源文件而不是 .aspx
文件的校验和。为缓解此难题,#pragma checksum 为 ASP.NET
页提供了校验和资助。

在 Visual C# 中创制 ASP.NET 项目时,生成的源文件包罗 .aspx
文件(从该公文生韩镕泽文件)的校验和。然后,编译器将此新闻写入 PDB 文件。

设若编译器在该文件中绝非蒙受 #pragma
checksum
 指令,它将计算校验和,然后将算出的值写入 PDB 文件。

 

最后:

c#的预处理命令,它能够用来区分编译生成的文件。使用预处理器指令可以禁止编译器编译代码的某一片段,当你安排公布两个差别版本的代码的时候,就可以用到预处理器指令了。编译软件的不比版本时,使用预处理器指令仍可以禁止编译器编译于额外功效有关的代码。别的,在编辑提供调试消息的代码时,也足以应用预处理器指令哦。

 

相关文章