亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

掌握 C# 预处理器指令:条件编译、诊断控制与代码组织实战

C# 预处理器指令完全指南

深度解析 C# 预处理器指令:条件编译、符号定义、警告/错误控制、行号重写、代码分区与编译器指示,附实战示例与最佳实践。

预处理器指令是编译器在正式编译前处理的命令。它们控制哪些代码参与编译、如何处理警告错误、甚至修改编译器对行号/文件名的诊断视图。

C# 中指令以 # 开头,单行结束(无需分号)。

C# 预处理器指令速查表
指令作用语法示例
#if表达式为真时包含代码
#if DEBUG
    // 调试代码
#endif
#elif#if 后的备选条件
#if COND1
    ...
#elif COND2
    ...
#endif
#else前序条件均假时执行
#if COND
    ...
#else
    ...
#endif
#endif结束条件编译块
#if COND ... #endif
#define定义编译符号#define TESTING
#undef取消符号定义#undef TESTING
#warning发出一级编译警告#warning 此处待重构
#error发出编译错误,阻止构建#error 不支持的平台
#line重写编译器行号/文件名#line 100 "Generated.cs"
#region定义可折叠代码区域(IDE 支持)
#region 初始化
    ...
#endregion
#pragma向编译器传递特殊指令#pragma warning disable CS0168

定义与取消符号

示例

#define TESTING   // 定义符号
#undef TESTING    // 取消符号

条件编译:#if、#elif、#else、#endif

实战示例

#define CSHARP
#undef PYTHON

using System;

namespace Directive {
    class ConditionalDirective {
        static void Main(string[] args) {
            #if (CSHARP && PYTHON)
                Console.WriteLine("CSHARP 和 PYTHON 均已定义");
            #elif (CSHARP && !PYTHON)
                Console.WriteLine("CSHARP 已定义,PYTHON 未定义");
            #elif (!CSHARP && PYTHON)
                Console.WriteLine("PYTHON 已定义,CSHARP 未定义");
            #else
                Console.WriteLine("CSHARP 和 PYTHON 均未定义");
            #endif
        }
    }
}

输出:CSHARP 已定义,PYTHON 未定义


生成警告与错误

警告示例

using System;

namespace Directives {
    class WarningDirective {
        public static void Main(string[] args) {
            #if (!CSHARP)
                #warning CSHARP 未定义
            #endif
            Console.WriteLine("#warning 指令示例");
        }
    }
}

编译输出包含警告行,但程序仍可运行,控制台打印文本。

错误示例

using System;

namespace Directive {
    class Error {
        public static void Main(string[] args) {
            #if (!CSHARP)
                #error CSHARP 未定义
            #endif
            Console.WriteLine("#error 指令示例");
        }
    }
}

编译失败,报错 CSHARP 未定义,最后一行永不执行。


自定义诊断位置:#line

示例

using System;

namespace Directive {
    class LineDemo {
        public static void Main(string[] args) {
            #line 200 "AnotherProgram.cs"
            #warning Actual warning generated by Program.cs on line 10
        }
    }
}

结果:警告显示为 AnotherProgram.cs(200,22): warning CS1030: ...


代码区域组织:#region / #endregion

示例

using System;

namespace Directive {
    class RegionDemo {
        public static void Main(string[] args) {
            #region Hello
            Console.WriteLine("Hello");
            Console.WriteLine("Hello");
            Console.WriteLine("Hello");
            Console.WriteLine("Hello");
            Console.WriteLine("Hello");
            #endregion
        }
    }
}

输出:五行 "Hello"。


高级编译器控制:#pragma

示例

using System;

namespace Directive {
    class PragmaDemo {
        public static void Main(string[] args) {
            #pragma warning disable
            #warning 这是警告 1
            #pragma warning restore
            #warning 这是警告 2
        }
    }
}

仅显示第二个警告。

深入参考:#pragma (C# 参考)

C语言

  1. 3D 打印 vs CNC 加工:为您的项目选择正确工具
  2. CNC加工中SFM代表什么?
  3. C#关键字与标识符:规则、完整列表与最佳实践
  4. 掌握 C++ 变量、字面量与常量:核心概念与实战指南
  5. 深入理解 C++ 数据类型:基础类型、修饰符与最佳实践
  6. C 语言关键字与标识符完全指南
  7. C 语言数据类型详解:int、float、char 等核心类型完全指南
  8. 深入理解 C 预处理器 (CPP):它如何简化编译过程
  9. C++预处理器指令详解:#define宏、条件编译、#/#运算符与预定义宏
  10. Python关键字与标识符:掌握保留字与命名规范
  11. Python 正则表达式 (re 模块) 实战指南
  12. 精通 Python time 模块:函数、结构体与实战示例