C# 语言规范--2.5.4 条件编译指令
|
条件编译指令用于按条件包含或排除源文件中的某些部分。
按照语法的规定,条件编译指令必须写成集的形式,集的组成依次为:一个 “pp 条件”最多只能选择一个它所包含的“条件节”去做通常的词法处理:
选定的“条件节”(若有)按正常的“输入节”处理:节中包含的源代码必须符合词法文法;从节中的源代码生成标记;节中的预处理指令具有规定的效果。 剩余的“条件节”(若有)按“跳过节”处理:除了预处理指令,节中的源代码不必一定要符合词法文法;不从节中的源代码生成任何词法标记;节中的预处理指令必须在词法上正确,但不另外处理。在按“跳过节”处理的“条件节”中,任何嵌套的“条件节”(包含在嵌套的 下面的示例阐释如何嵌套条件编译指令: #define Debug // Debugging on
#undef Trace // Tracing off
class PurchaseTransaction
{
void Commit() {
#if Debug
CheckConsistency();
#if Trace
WriteToLog(this.ToString());
#endif
#endif
CommitHelper();
}
}
除预处理指令外,跳过的源代码与词法分析无关。例如,尽管在 #define Debug // Debugging on
class PurchaseTransaction
{
void Commit() {
#if Debug
CheckConsistency();
#else
/* Do something else
#endif
}
}
但请注意,即使是在源代码的跳过节中,也要求预处理指令在词法上正确。 软件开发网 www.mscto.com
当预处理指令出现在多行输入元素的内部时,不作为预处理指令处理。例如,程序: class Hello
{
static void Main() {
System.Console.WriteLine(@"hello,
#if Debug
world
#else
Nebraska
#endif
");
}
}
输出结果为: hello,
#if Debug
world
#else
Nebraska
#endif
在特殊的情况下,如何处理预处理指令集可能取决于 pp 表达式的计算。示例: #if X
/*
#else
/* */ class Q { }
#endif
总是产生同样的标记流 (
源代码网推荐 源代码网供稿. |
