下面对C#中预编译指令进行介绍:
1.#和#undef
使用方法:
# DEBUG
#undef DEBUG
#告诉编译器我定义了个DEBUG个符号他类似个变量但是它没有具体值可以将它看为个符号而已#undef就是删除这个符号定义如果符号DEBUG没定义过则#undef不起作用否则#不起作用 2者都必须放在源代码的前 2者顺序看代码顺序:
# DEBUG
#undef DEBUG
这样话DEBUG是没有定义如果 2者换个顺序编译器就认为DEBUG被定义了
2.#、#el、#、#end
这个告诉编译器进行编译代码流程控制考虑下面代码:
# DEBUG
Console.Write("debug");
#el RELEASE
Console.Write("realse");
#
Console.Write("other");
#end
以上代码就是说如果定义了DEBUG则输出debug定义了RELEASE则输出realse否则输出other如果定义了DEBUG和REALSE会如何样呢?各位可以自己试下3.#warning、#error
通过这两个指定可以告诉编译器出个警告还是信息除了信息以后编译将停止
参考下面代码:
# DEBUG ------〉该DEBUG如果选中当前状态为DEBUG则这个默认为#
#warning “现在是Ddbug状态”
#el RELEASE ------〉如果选中release状态话这个确没有默认不知道我试验对不对
#warning “现在是Realse状态”
#
#error“并清楚什么状态”
#end
4.#region 和#endregion这个两个用来组成代码块
5.#line (这个指定使用不太明白参考MSDN)
这个指令可以改jian变编译器在警告和信息中显示文件名和行号信息用#line default把行号恢复为默认行号
下面举例介绍说明如何报告和行号关联两个警告#line 200 指令迫使行号为 200(尽管默认值为 #7)另行 (#9) 作为默认 #line 指令 结果跟在通常序列后
举例1:
// preprocessor_line.cs
public MyClass2
{
public void Main
{
#line 200
i; // CS0168 on line 200
#line default
char c; // CS0168 on line 9
}
}
举例2:下面举例介绍说明调试器如何忽略代码中隐藏行运行此举例时它将显示 3行文本但是当设置如举例所示断点并按 F10 键逐句通过代码时您将看到调试器忽略了隐藏行另请注意即使在隐藏行上设置断点调试器仍会忽略它
// preprocessor_linehidden.cs
using ;
MyClass
{
public void Main
{
Console.WriteLine("Normal line #1."); // Set a po here.
#line hidden
Console.WriteLine("Hidden line.");
#line default
Console.WriteLine("Normal line #2.");
}
}
最新评论