C#必备知识的预编译指令

  预编译又称为预处理,是做些代码文本替换工作处理#开头指令,比如拷贝#包含文件代码#宏定义替换,条件编译等就是为编译做预备工作阶段主要处理#开始预编译指令

  下面对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.");
  }
}


Tags: 

延伸阅读

最新评论

发表评论