C#预处理器指令

作者: adm 分类: C# 发布时间: 2024-03-20

预处理指令的作用主要是向编译器发出指令,以便在程序编译开始之前对信息进行一些预处理操作。在 C# 中,预处理器指令均以#开头,并且预处理器指令之前只能出现空格不能出现任何代码。另外,预处理器指令不是语句,因此它们不需要以分号;结尾。

在 C# 中,预处理指令用于帮助条件编译。不同于 C 和 C++ 中的指令,在 C# 中不能使用这些指令来创建宏,而且预处理器指令必须是一行中唯一的代码,不能掺杂其它。
C# 中的预处理器指令
下表中列出了 C# 中提供的预处理器指令:

预处理器指令	描述
#define	用于定义一系列字符,可以将这些字符称为符号
#undef	用于取消一个已定义符号
#if	用于测试符号是否为真
#else	用于创建复合条件指令,与 #if 一起使用
#elif	用于创建复合条件指令
#endif	指定一个条件指令的结束
#line	用于修改编译器的行数以及(可选地)输出错误和警告的文件名
#error	用于在代码的指定位置生成一个错误
#warning	用于在代码的指定位置生成一级警告
#region	用于在使用 Visual Studio Code Editor 的大纲特性时,指定一个可展开或折叠的代码块
#endregion	用于标识 #region 块的结束
#define 预处理器
#define 预处理器指令用来创建符号常量,这个符号可以作为传递给 #if 指令的表达式,表达式将返回 true。#define 的语法格式如下:
#define symbol

【示例】下面通过示例来演示 #define 预处理器指令的使用:

#define PI
using System;
namespace net.yinzhong
{
    class Demo
    {
        static void Main(string[] args) 
        {
            #if (PI)
                Console.WriteLine("PI 已定义");
            #else
                Console.WriteLine("PI 未定义");
            #endif
            Console.ReadKey();
        }
    }
}

运行结果如下:
PI 已定义

条件指令
您可以使用 #if 来创建条件指令,条件指令可以用于测试一个或多个符号的值是否为 true 。如果符号的值为 true,那么编译器将评估 #if 指令和下一个指令之间的所有代码。在语法上 #if 预处理器语句与 C# 中的 if 条件判断语句比较相似,如下所示:

#if symbol_1
    // 要执行的代码
#elif symbol_2
    // 要执行的代码
#else
    // 要执行的代码
#endif

其中,symbol 是要测试的符号的名称。

条件指令中仅可以使用运算符==(相等)和!=(不相等)来测试布尔值 true 或 false,例如 true 表示已定义该符号。另外,还可以使用&& (and)、|| (or)和! (not)运算符来同时测试多个符号,以及使用括号对符号和运算符分组。
注意:以 #if 指令开头的条件指令必须以 #endif 指令显式结束。

下面通过示例来演示条件指令的使用:

#define DEBUG
#define VC_V10
using System;
namespace net.yinzhong
{
    class Demo
    {
        static void Main(string[] args) 
        {
            #if (DEBUG && !VC_V10)
                Console.WriteLine("DEBUG 已定义");
            #elif (!DEBUG && VC_V10)
                Console.WriteLine("VC_V10 已定义");
            #elif (DEBUG && VC_V10)
                Console.WriteLine("DEBUG and VC_V10 已定义");
            #else
                Console.WriteLine("DEBUG and VC_V10 未定义");
            #endif
            Console.ReadKey();
        }
    }
}

运行结果如下:

DEBUG and VC_V10 已定义

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!