预处理器指令用来在编译开始之前给编译器指示预处理信息。
所有预处理程序指令以符号#
开头,并且只有空格字符在一行上,空格符可预处理器指令之前出现。 预处理器指令不是语句,所以它们不以分号()结尾。
C# 编译器没有分隔预处理器,指令被处理为只有一个。 在 C# 中,预处理指令用于指示条件编译。与C语言和C++指令不同,它们不用于创建宏。 预处理程序指令必须是一行中的唯一指令。
C# 预处理器指令
下表列出了 C# 中提供的预处理指令:
预处理指令 | 描述 |
---|---|
#define |
定义一个叫作符号的字符序列。 |
#undef |
用于取消定义的符号。 |
#if |
用来测试符号以查看它们是否为真。 |
#else |
用来与#if 来创建一个复合条件指令。 |
#elif |
用来创建一个复合条件指令。 |
#endif |
指定条件指令的结束。 |
#line |
用于修改编译器的行号和(可选)修改错误和警告的文件名输出。 |
#error |
用于从代码中的特定位置生成错误。 |
#warning |
用于从代码中的特定位置生成一级警告。 |
#region |
允许您在使用Visual Studio代码编辑器的概述功能时指定可以展开或折叠的代码块。 |
#endregion |
用于标志着#region 块的结束。 |
#define预处理程序
#define
预处理程序指令创建符号常量。#define
允许定义一个符号,通过使用该符号作为传递给#if
指令的表达式,表达式的计算结果为true
。其语法如下:
#define symbol
以下程序演示如何使用#define
指令:
#define PI
using System
namespace PreprocessorDAppl
{
class Program
{
static void Main(string[] args)
{
#if (PI)
Console.WriteLine("PI is defined")
#else
Console.WriteLine("PI is not defined")
#endif
Console.ReadKey()
}
}
}
当编译和执行上述代码时,会产生以下结果:
PI is defined
条件指令
可以使用#if
指令创建条件指令。条件指令用于测试符号检查它们的值是否为真。 如果它们评估求值为true
,编译器将评估求值#if
到下一个指令之间的所有代码。
条件指令的语法是:
#if symbol [operator symbol]...
其中,符号(symbol
)是要测试的符号的名称。也可以使用布尔值:true
和false
,或者使用否定运算符加到符号的前面。
运算符符号是用于评估符号的运算符。运算符可以是以下任一项:
==
(相等)!=
(不等式)&&
(和)||
(或)
也可以使用括号对符号和运算符进行分组。在用于编译调试版本的代码或编译特定配置时可使用条件指令。 以#if
指令开头的条件指令必须明确地使用#endif
指令终止。
以下程序演示了条件指令的用法:
#define DEBUG
#define VC_V10
using System
public class TestClass
{
public static void Main()
{
#if (DEBUG && !VC_V10)
Console.WriteLine("DEBUG is defined")
#elif (!DEBUG && VC_V10)
Console.WriteLine("VC_V10 is defined")
#elif (DEBUG && VC_V10)
Console.WriteLine("DEBUG and VC_V10 are defined")
#else
Console.WriteLine("DEBUG and VC_V10 are not defined")
#endif
Console.ReadKey()
}
}
当编译和执行上述代码时,会产生以下结果:
DEBUG and VC_V10 are defined