预处理指令,指示编译器如何处理源代码。在某些情况下,我们可能希望编译器忽略一部分代码。二其他情况下,我们可能希望代码被编译,预处理指令给了我们这样的选项。
语法规则:
1.预处理指令必须和C#代码在不同的行。
2.于C#语法不通过,预处理指令不需要以分号结尾。
3.包含预处理指令的每一行必须以# 字符开始;在#字符前可以有空格,在#字符和指令之间可以有空格。
4.允许行尾注释。
5.预处理指令说在的行不允许分隔符注释。
·#define指令声明一个编译符号;
·#undef指令取消定义一个编译符号;
#define和#undef指令只能用在源文件的第一行,也就是任何代码之前使用。
条件编译允许我们某个编译符号被定义标注一段代码被编译或跳过。
有4个指令可以用来指定条件编译:
·#if
·#else
·#elif
.#endif
条件是一个返回true或false的简单表达式。
·条件可以由单个编译符号、符号表达式或操作符组成。子条件可以使用圆括号分组。
·文本true或false也可以在条件表达式中使用。
#if !DemoVersion
...
#endif#if (LeftHanded&&OemVersion)
...
#endif
#if true
...
#if和#endif指令在条件编译结构中需要配对使用。
#if~ #endif
#if~#else~#endif
#if~#elif~#else~#endif
//==============================================
#if Version
...诊断指令产生用户自定义的编译时警告及错误消息。
语法
注意,于普通的C#字符串不同,他们不需要被引号包围。
#warning Message
#error Message
当编译器遇到诊断指令时,它会输出相关的消息,诊断指令的消息会和任何编译器产生的警告和错误的消息在一列。
#if RightHanded && LeftHanded
#error Can't build for both RightHanded and LeftHanded
#endif
#warning Remember to come back and clean up this code!
·#error指令在if结构中,因此只有符合#if指令的条件才会产生消息。
·#warning指令用于提醒程序员回头来清理这段代码。
·改变由编译器警告和错误消息报告的出现行数
·改变被编译器源文件的文件名
·对交互式调试器隐藏一些行
#line指令的语法如下:
#line integer 设置下一行为整数的行的行号
#line "filename" 设置文件名
#line default //重新保存世界的行号和文件名
#line hidden //在断点调试中隐藏代码
#line //停止在调试器中隐藏代码
#line指令加上一个整数参数会使编译器认为下面代码的行是所设置的行,之后的行数会在这个行数的基础上递增。
·要改变外观文件名,可以在双引号内使用文件名作为参数。双引号是必须的。
·要返回真实行号的真实文件名,可以使用default参数。
·要对交互调试器的断点调试功能隐藏代码段,可以使用hidden作为参数。要停止隐藏,可以使用不带任何参数的指令。
区域指令允许我们标注和有选择性命名一段代码。#region特性如下:
1.被放置在希望标注的代码段之上。
2.用指令后的可选字符串文本作为其名字。
3.在之后的代码中必须由#endregion指令终止。
#pagma warning 指令允许我们关闭及重新开启警告消息。
1.要关闭警告消息,可以使用disable加上逗号分隔的希望关闭的警告数列表的形式。
2.要重新开启警告消息,可以使用restore加上逗号分隔的希望关闭的警告数列表的形式。