C#入门系列 -- 预处理命令

举报
陈言必行 发表于 2022/03/19 13:59:17 2022/03/19
【摘要】 概念  源代码指定了程序的定义,预处理指令指示编译器如何处理源代码。C#中的预处理指令由编译器来处理,预处理指令作为词法分析阶段的一部分处理,并不存在单独的预处理阶段。  预处理器指令从来不会被翻译为可执行代码中的命令,但会影响编译过程的各个方面。预处理指令提供按条件跳过源文件中的节、报告错误和警告条件,以及描绘源代码的不同区域的能力。  在编译软件的基本版本时,使用预处理器指令可以禁止编...

概念

  源代码指定了程序的定义,预处理指令指示编译器如何处理源代码。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。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。