C#教程 - 预处理指令(Preprocessor Directives)
更新记录
转载请注明出处:
2022年9月23日 发布。
2022年9月10日 从笔记迁移到博客。
预处理指令(Preprocessor Directives)说明
预处理指令(preprocessor directive)指示编译器如何处理源代码
作用是为编译器添加额外的编译信息
预处理器在编译时调用的指令,类似于条件运算表达式,不过是在编译时调用,不是在运行时调用,可以决定哪些语句进行编译
注意:
C#中本质上没有预处理程序,实际上是由编译器处理的,C/C++有实际预处理阶段
预处理指令必须和C#代码在不同行
与C#语句不同,预处理指令不需要分号结尾
所有的预处理指令以#开头
允许在预处理指令的末尾添加单行注释,不允许多行注释
实例:
定义全局预处理指令
打开.csproj 文件
写入配置文件
<PropertyGroup>
<DefineConstants>DEBUG;ANOTHERSYMBOL</DefineConstants>
</PropertyGroup>
预处理指令集合
#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
示意图:
实例:
实例:检测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 //停止在调试器中隐藏代码
实例:
实例:自定义行号
#line 113 "TicTacToe.cs"
实例:恢复行号
#line default
区域指令
区域指令用于标注一段代码并为其命名,区域名是可选的,常用于在Visual Studio中进行折叠代码
语法:
#region 区域名
//代码
#endregion
警告处理指令
警告处理指令允许我们关闭或开启警告信息
语法:
#pragma warning disable 警告号,警告号,…. //关闭警告
#pragma warning restore 警告号,警告号,…. //开启警告
注意:要关闭或开启所有警告号,可以不用带警告号参数
实例:
#pragma warning restore 618 //恢复618警告
实例:
开启禁用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
本文来自博客园,作者:重庆熊猫,转载请注明原文链接:https://www.cnblogs.com/cqpanda/p/16712688.html