您的位置:手机购彩平台 > 手机购彩平台-编程 > 编译的第一步就是预处理

编译的第一步就是预处理

2019-09-25 07:54

什么是c#手机购彩平台,预处理指令??

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

C#预处理器指令有哪些??

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

手机购彩平台 1

下面我们一一道来

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

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可以定义一个符号,并通过将该符号用作表达式传递给 #if指令,使该表达式的计算结果为true

例如:

手机购彩平台 3

备注:

可以定义符号,但是无法对符号赋值。

#define指令必须在使用任何也不是指令的指令之前出现在文件中。#define Debug1必须写在所有using 之前

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

#define创建的符号的范围是在其中定义该符号的文件。

#undef使您可以取消符号的定义,以便通过将该符号用作#if指令中的表达式,使表达式的计算结果为false

例如:

手机购彩平台 4

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

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

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

例如:

手机购彩平台 5

4.#pragma,#pragma warning

警告可以指出代码中可能存在的问题,所以是很有用滴。但是,有的警告我们可以合理地忽略,所以有必要关闭掉它们。

使用预处理指令#pragma 禁用 #warning指令

例如:#pragma warning disable 1030

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

重新启用警告仍然是使用#pragma指令,只是在warning后面添加restore选项

例如:#pragma warning restore 1030

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

例如:

手机购彩平台 6

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

#line使您可以修改编译器的行号以及错误和警告的文件名输出。下面的示例说明如何报告与行号关联的两个警告。#line 200指令强迫行号为 200(尽管默认值为 #7)。另一行 作为默认#line指令的结果跟在通常序列后。

手机购彩平台 7

(下面这段备注摘自:

备注:

#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后面的说明文字

例如:

手机购彩平台 8

手机购彩平台 9

备注#region块必须以 #endregion指令终止。

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

(下面这段摘自:

**7.#pragma checksum**

可用于生成源文件的校验和,以帮助调试 ASP.NET 页。

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

参数

"filename"

要求监视更改或更新的文件的名称。

"{guid}"

文件的全局唯一标识符 。

"checksum_bytes"

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

备注Visual Studio 调试器使用校验和来确保找到的总是正确的源。编译器计算源文件的校验和,然后将输出发出到程序数据库 文件。最后,调试器使用 PDB 来比较它为源文件计算的校验和。

此解决方案不适用于 ASP.NET 项目,因为算出的是生成的源文件而不是 .aspx 文件的校验和。为解决此问题,#pragma checksum为 ASP.NET 页提供了校验和支持。

在 Visual C# 中创建 ASP.NET 项目时,生成的源文件包含 .aspx 文件(从该文件生成源文件)的校验和。然后,编译器将此信息写入 PDB 文件。

如果编译器在该文件中没有遇到#pragma checksum指令,它将计算校验和,然后将算出的值写入 PDB 文件。

最后:

c#的预处理命令,它可以用来区分编译生成的文件。使用预处理器指令可以禁止编译器编译代码的某一部分,当您计划发布多个不同版本的代码的时候,就可以用到预处理器指令了。编译软件的不同版本时,使用预处理器指令还可以禁止编译器编译于额外功能相关的代码。另外,在编写提供调试信息的代码时,也可以使用预处理器指令哦。

本文由手机购彩平台发布于手机购彩平台-编程,转载请注明出处:编译的第一步就是预处理

关键词: