重庆熊猫 Loading

C#教程 - 预处理指令(Preprocessor Directives)

更新记录
转载请注明出处:
2022年9月23日 发布。
2022年9月10日 从笔记迁移到博客。

预处理指令(Preprocessor Directives)说明

预处理指令(preprocessor directive)指示编译器如何处理源代码

作用是为编译器添加额外的编译信息

预处理器在编译时调用的指令,类似于条件运算表达式,不过是在编译时调用,不是在运行时调用,可以决定哪些语句进行编译

注意:

​ C#中本质上没有预处理程序,实际上是由编译器处理的,C/C++有实际预处理阶段

​ 预处理指令必须和C#代码在不同行

​ 与C#语句不同,预处理指令不需要分号结尾

​ 所有的预处理指令以#开头

​ 允许在预处理指令的末尾添加单行注释,不允许多行注释

实例:
image

定义全局预处理指令

打开.csproj 文件

写入配置文件

<PropertyGroup>
  <DefineConstants>DEBUG;ANOTHERSYMBOL</DefineConstants>
</PropertyGroup>

预处理指令集合

image

#nullable option

编译符号定义符号(Defines &Undefines Symbol)

编译符号只能是两种状态,要么被定义,要么未定义

注意:

​ 编译符号定义指令只能放置在C#源文件第一行

​ 可以是除true和false之外的任何标识符,包括C#关键字

​ 编译符号定义的是标志符号,没有值(C/C++有值)

​ 编译符号定义只在单个C#源文件内有效

​ 编译符号定义可以重复定义,即可以定义多次

在编译器的命令行中使用定义符号

>dotnet.exe -define:CSHARP2PLUS TicTacToe.cs

语法:

#define 符号    //指令声明一个编译符号
#undef 符号     //指令取消声明一个编译符号

实例:

#define Panda666Plus
#undef Panda666Plus

实例:

#define CSHARP2PLUS

在项目配置文件中添加常量指令

打开项目配置文件.csproj

添加

<PropertyGroup>
<DefineConstants>DEBUG;ANOTHERSYMBOL</DefineConstants>
</PropertyGroup>

条件编译指令(Conditional Directives)

条件编译允许根据 某个编译符号是否被定义 或 表达式值 来选择编译或跳过代码

注意:

​ 条件是一个返回true或false的简单表达式

​ #if必须和#endif配合使用

​ #if 和#elif条件编译指令可以和||, &&, ! 运算符一起使用

C#中的4个条件编译指令:

#if
#elif
#else
#endif

示意图:
image

image

实例:
image

实例:检测windows系统

#if WINDOWS
//code
#endif

实例:检测Linux系统

#if LINUX
//code
#endif

实例:检测Linux系统 和 Windows系统

#if LINUX
//code
#elif WINDOWS
//code
#endif

实例:检测调试模式

#if DEBUG
//code
#endif

实例:检测发布模式

#if RELEASE
//code
#endif

实例:条件指令 与 运算符 一起使用

#if TESTMODE && !DEBUG

实例:判断C#6以前版本

#if PRECSHARP6
#endif

诊断指令

诊断指令用于产生用户自定义的编译时警告及错误信息

C#中支持以下2个诊断指令:

#error
#warning

语法:

#error Message
#warning Message

注意:Message不需要引号包围

行号指令

行号指令可以:

​ 改变编译器警告和错误消息出现的行数

​ 改变被编译源文件的文件名

​ 对交互式调试器隐藏一些行

语法:

#line  integer          //设置下一行的行号为指定值,后面的在这个基础上递增
#line  “filename”       //设置文件名
#line  default          //从新设置为实际的行号和文件名
#line   hidden          //在断点调试器中隐藏代码
#line                   //停止在调试器中隐藏代码

实例:
image

实例:自定义行号

#line 113 "TicTacToe.cs"

实例:恢复行号

#line default

区域指令

区域指令用于标注一段代码并为其命名,区域名是可选的,常用于在Visual Studio中进行折叠代码

语法:

#region 区域名
    //代码
#endregion

警告处理指令

警告处理指令允许我们关闭或开启警告信息

语法:

#pragma warning disable 警告号,警告号,….          //关闭警告
#pragma warning restore 警告号,警告号,….          //开启警告

注意:要关闭或开启所有警告号,可以不用带警告号参数

实例:

#pragma warning restore 618   //恢复618警告

image

image

实例:
开启禁用414错误警告

#pragma warning disable 414

恢复启用414错误警告

#pragma warning restore 414

实例:关闭和开启警告信息

public class Foo
{
 static void Main() { }
 #pragma warning disable 414
 static string Message = "Hello";
 #pragma warning restore 414
}

实例:显示警告信息

#warning    "Same move allowed multiple times."

实例:禁用警告

#pragma warning disable CS1030

实例:恢复警告

#pragma warning restore  CS1030

开启可空引用类型

#nullable option

实例:开启nullable

#nullable enable

实例:关闭nullable

#nullable disable

实例:恢复默认的nullable设置

#nullable restore

实例:开启引用类型可以nullable

#nullable enable
string[]? test2 = null;
#nullable disable
posted @ 2022-09-23 08:46  重庆熊猫  阅读(439)  评论(0编辑  收藏  举报