前言
预处理器指令是在编程语言编译流程开始之前执行的特殊指令。预处理器指令的作用主要是向编译器发出指令,以便在程序编译开始之前对信息进行一些预处理操作。这对于开发调试版本和发布版本之间的差异、管理平台的特定代码、处理特定编译警告和错误等都非常有用。
在C#中,预处理器指令均以#开头,并且预处理器指令之前只能出现空格不能出现任何代码。另外,预处理器指令不是语句,因此它们不需要以分号;
结尾。本文将介绍C#中预处理器指令的用途、语法。
语法与用途
C# 中包含以下预处理器指令,下表是各指令的简述。
#nullable 可空上下文
#nullable 是设置可为空注释上下文和可为空警告上下文 。此指令控制是否可为空注释是否有效,以及是否给出为 Null 性警告。使用方式看下表:
使用示例:
#nullable disable
using System;
namespace Fountain.Net.Base.Sample
{
class Program
{
static void Main(string[] args)
{
// 定义一个整型变量 x
int x = 5;
// 定义一个整型变量 y
int y = 4;
// 定义一个整型变量 result,未赋值
int result;
// 两个变量进行加运算
result = x + y;
#if DEBUG
Console.ReadLine();
#else
Console.WriteLine("按回车退出");
Console.ReadLine();
#endif
}
}
}
#nullable enable
#define 和 #undef 定义符号
#define是定义符号,#undef 是取消定义符号,当使用 #define定义符号后,在将符号用作传递给 #if 指令的表达式时,该表达式的计算结果为 true。
使用示例:
#nullable disable
using System;
namespace Fountain.Net.Base.Sample
{
class Program
{
static void Main(string[] args)
{
// 定义一个整型变量 x
int x = 5;
// 定义一个整型变量 y
int y = 4;
// 定义一个整型变量 result,未赋值
int result;
// 两个变量进行加运算
result = x + y;
#if DEBUG
Console.ReadLine();
#else
Console.WriteLine("按回车退出");
Console.ReadLine();
#endif
}
}
}
#nullable enable
#if、#elif、#else 和#endif 条件编译
#if、#elif、#else和#endif 这四个预处理器指令来控制条件编译,条件编译在编译调试版本的代码或编译特定配置的代码时会很有用。可以使用运算符 ==和 != true 表示定义该符号。
使用示例:
#nullable disable
#define commandTest
using System;
namespace Fountain.Net.Base.Sample
{
class Program
{
static void Main(string[] args)
{
// 定义一个整型变量 x
int x = 5;
// 定义一个整型变量 y
int y = 4;
// 定义一个整型变量 result,未赋值
int result;
// 两个变量进行加运算
result = x + y;
#if DEBUG
Console.ReadLine();
#else
Console.WriteLine("按回车退出");
Console.ReadLine();
#endif
}
}
}
#nullable enable
#warning、#error和#line 错误和警告信息
#warning、#error和#line 可以指示编译器生成用户定义的编译器错误和警告,并控制行信息。#error:使用指定的消息生成编译器错误;#warning:使用指定的消息生成编译器警告;#line:更改用编译器消息输出的行号。
使用示例:
using System;
namespace Fountain.Net.Base.Sample
{
class Program
{
static void Main(string[] args)
{
#region Define variables
// 定义一个整型变量 x
int x = 5;
// 定义一个整型变量 y
int y = 4;
// 定义一个整型变量 result,未赋值
int result;
// 两个变量进行加运算
result = x + y;
#endregion
#if DEBUG
#warning Debug mode is enabled!
#endif
Console.WriteLine("按回车退出");
Console.ReadLine();
}
}
}
编译时出现警告
#region 和#endregion 定义区域
#region与#endregion 二个指令是来定义可在大纲中折叠的代码区域。#region 启动区域,#endregion结束区域。
使用示例:
using System;
namespace Fountain.Net.Base.Sample
{
class Program
{
static void Main(string[] args)
{
#region Define variables
// 定义一个整型变量 x
int x = 5;
// 定义一个整型变量 y
int y = 4;
// 定义一个整型变量 result,未赋值
int result;
// 两个变量进行加运算
result = x + y;
#endregion
Console.WriteLine("按回车退出");
Console.ReadLine();
}
}
}
#pragma 杂注
#pragma 为编译器给出特殊指令以编译它所在的文件。这些指令必须受编译器支持,不能使用 #pragma 创建自定义的预处理指令。
#pragma warning:启用或禁用警告。
#pragma checksum:生成校验和。
小结
以上是C#中常用的预处理器指令的语法与用途进行了介绍,希望对大家的学习C#知识有一定的参考借鉴价值。