C#入门系列 -- 预处理命令
【摘要】 概念 源代码指定了程序的定义,预处理指令指示编译器如何处理源代码。C#中的预处理指令由编译器来处理,预处理指令作为词法分析阶段的一部分处理,并不存在单独的预处理阶段。 预处理器指令从来不会被翻译为可执行代码中的命令,但会影响编译过程的各个方面。预处理指令提供按条件跳过源文件中的节、报告错误和警告条件,以及描绘源代码的不同区域的能力。 在编译软件的基本版本时,使用预处理器指令可以禁止编...
概念
源代码指定了程序的定义,预处理指令指示编译器如何处理源代码。C#中的预处理指令由编译器来处理,预处理指令作为词法分析阶段的一部分处理,并不存在单独的预处理阶段。
预处理器指令从来不会被翻译为可执行代码中的命令,但会影响编译过程的各个方面。预处理指令提供按条件跳过源文件中的节、报告错误和警告条件,以及描绘源代码的不同区域的能力。
在编译软件的基本版本时,使用预处理器指令可以禁止编译器编译与额外功能相关的代码。在编写提供调试信息的代码时,也可以使用预处理器指令。
常用预处理指令
指令名称 | 指令格式 | 含义 |
---|---|---|
声明指令 | #define | 条件编译符号使给定的条件编译符号成为已定义的符号(从跟在指令后面的源代码行开始) |
声明指令 | #undef | 条件编译符号使给定的条件编译符号成为未定义的符号(从跟在指令后面的源代码行开始) |
条件编译指令 | #if | 表达式表达式值为true时,编译下面的片段 |
条件编译指令 | #elif | 表达式表达式值为true时,编译下面的片段 |
条件编译指令 | #else | 如果之前的#if或#elif表达式为false,编译下面的片段 |
条件编译指令 | #endif | 标记一个#if结构的结束行指令#line行标识符改变编译器在输出(如警告和错误)中报告的行号和源文件名称 |
诊断指令 | #error | 错误消息显示编译时的错误消息 |
诊断指令 | #warning | 警告消息显示编译时的警告消息 |
区域指令 | #region | 名称标记一段代码的开始,没有编译效果 |
区域指令 | #endregion | 名称标记一段代码的结束,没有编译效果 |
pragma指令 | #pragma文本信息 | 指定有关程序上下文的信息 |
语法规则
使用预处理指令时应注意的一些重要语法规则:
- 预处理指令总是占用源代码中的单独一行;
- 预处理指令不需要使用分号作为结尾标志;
- 预处理指令必须以#字符和预处理指令名称开头,在#字符之前和#字符与指令之间可以有空格
- 包含#define、#undef、#if、#elif、#else、#endif或#line指令的源代码行可以用单行注释结束。
- 预处理指令既不是标记,也不是C#句法文法的组成部分。但是,可以用预处理指令包含或排除标记序列,并且可以以这种方式影响C#程序的含义。
预处理表达式
预处理表达式可以出现在#if和#elif指令中。在预处理表达式中允许使用!、==、!=、&&和||运算符,并且可以使用括号进行分组。
当在预处理表达式中引用时,已定义的条件编译符号具有布尔值true,未定义的条件编译符号具有布尔值false。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)