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。
版权声明: 本文为 InfoQ 作者【陈言必行】的原创文章。
原文链接:【http://xie.infoq.cn/article/9f8b2fc4ccdafdecd00905fe3】。未经作者许可,禁止转载。
评论