写点什么

C#入门系列 (二十九) -- 预处理命令

作者:陈言必行
  • 2022 年 7 月 24 日
  • 本文字数:954 字

    阅读完需:约 3 分钟

概念

  源代码指定了程序的定义,预处理指令指示编译器如何处理源代码。C#中的预处理指令由编译器来处理,预处理指令作为词法分析阶段的一部分处理,并不存在单独的预处理阶段。


  预处理器指令从来不会被翻译为可执行代码中的命令,但会影响编译过程的各个方面。预处理指令提供按条件跳过源文件中的节、报告错误和警告条件,以及描绘源代码的不同区域的能力。


  在编译软件的基本版本时,使用预处理器指令可以禁止编译器编译与额外功能相关的代码。在编写提供调试信息的代码时,也可以使用预处理器指令。



常用预处理指令


  • 声明指令 - #define:条件编译符号使给定的条件编译符号成为已定义的符号(从跟在指令后面的源代码行开始)

  • 声明指令 - #undef:条件编译符号使给定的条件编译符号成为未定义的符号(从跟在指令后面的源代码行开始)

  • 条件编译指令 - #if:表达式表达式值为 true 时,编译下面的片段

  • 条件编译指令 - #elif:表达式表达式值为 true 时,编译下面的片段

  • 条件编译指令 - #else:如果之前的 #if 或 #elif 表达式为 false,编译下面的片段

  • 条件编译指令 - #endif:标记一个 #if 结构的结束行指令 #line 行标识符改变编译器在输出(如警告和错误)中报告的行号和源文件名称

  • 诊断指令 - #error:错误消息显示编译时的错误消息

  • 诊断指令 - #warning:警告消息显示编译时的警告消息

  • 区域指令 - #region:名称标记一段代码的开始,没有编译效果

  • 区域指令 - #endregion:名称标记一段代码的结束,没有编译效果

  • pragma 指令 - #pragma:文本信息|指定有关程序上下文的信息


语法规则

使用预处理指令时应注意的一些重要语法规则:


  1. 预处理指令总是占用源代码中的单独一行;

  2. 预处理指令不需要使用分号作为结尾标志;

  3. 预处理指令必须以 #字符和预处理指令名称开头,在 #字符之前和 #字符与指令之间可以有空格

  4. 包含 #define、#undef、#if、#elif、#else、#endif 或 #line 指令的源代码行可以用单行注释结束。

  5. 预处理指令既不是标记,也不是 C#句法文法的组成部分。但是,可以用预处理指令包含或排除标记序列,并且可以以这种方式影响 C#程序的含义。



预处理表达式

预处理表达式可以出现在 #if 和 #elif 指令中。在预处理表达式中允许使用!、==、!=、&&和||运算符,并且可以使用括号进行分组。


当在预处理表达式中引用时,已定义的条件编译符号具有布尔值 true,未定义的条件编译符号具有布尔值 false。

发布于: 2 小时前阅读数: 9
用户头像

陈言必行

关注

公号:开发同学留步 2019.03.12 加入

我是一个从事Unity游戏开发攻城狮,6年开发经验,助你日常不加班。

评论

发布
暂无评论
C#入门系列(二十九) -- 预处理命令_七月月更_陈言必行_InfoQ写作社区