预处理指令

预处理指令,指示编译器如何处理源代码。在某些情况下,我们可能希望编译器忽略一部分代码。二其他情况下,我们可能希望代码被编译,预处理指令给了我们这样的选项。

语法规则:

1.预处理指令必须和C#代码在不同的行。

2.于C#语法不通过,预处理指令不需要以分号结尾。

3.包含预处理指令的每一行必须以# 字符开始;在#字符前可以有空格,在#字符和指令之间可以有空格。

4.允许行尾注释。

5.预处理指令说在的行不允许分隔符注释。


#define和#undef指令

·#define指令声明一个编译符号;

·#undef指令取消定义一个编译符号;

#define和#undef指令只能用在源文件的第一行,也就是任何代码之前使用。

条件编译

条件编译允许我们某个编译符号被定义标注一段代码被编译或跳过。

有4个指令可以用来指定条件编译:

·#if

·#else

·#elif

.#endif

条件是一个返回true或false的简单表达式。

·条件可以由单个编译符号、符号表达式或操作符组成。子条件可以使用圆括号分组。

·文本true或false也可以在条件表达式中使用。


#if !DemoVersion

...

#endif

#if (LeftHanded&&OemVersion)

...

#endif

#if true

...

#endif

条件编译结构

#if和#endif指令在条件编译结构中需要配对使用。

#if~ #endif

#if~#else~#endif

#if~#elif~#else~#endif

//==============================================

#if Version

    ...
#elif Version1
    ...
#elif Version2
    ...
#elif Version3
    ...
#else
    ...
#endif

诊断指令

诊断指令产生用户自定义的编译时警告及错误消息。

语法

注意,于普通的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指令

#pagma warning 指令允许我们关闭及重新开启警告消息。

1.要关闭警告消息,可以使用disable加上逗号分隔的希望关闭的警告数列表的形式。

2.要重新开启警告消息,可以使用restore加上逗号分隔的希望关闭的警告数列表的形式。