《Illustrated C# 2012, 4th Edition》Daniel M. Solis 第23章 预处理指令 笔记

预处理指令(preprocessor directive)指示编译器如何处理源代码。
C#没有实际的预处理程序,预处理指令由编译器处理。

C#中预处理指令以#开头,#与关键字之间允许存在空格,预处理指令结尾不需要分号。预处理指令之后允许//注释,不能使用/*...*/注释。

C#预处理指令:

#define指令定义一个编译符号,#undef取消定义一个编译符号。编译符号可以是true、false以外的任何标识符。与C/C++不同,C#的编译符号没有值。
#define和#undef指令只能在C#代码之前使用,即源代码开头。
编译符号的作用域仅所处的源文件。编译符号允许重复定义。

#if、#else、#elif、#endif用于条件编译。
#if和#elif指令中可以使用true、false和以下条件,支持圆括号:

诊断指令:

#warning Message
#error Message

Message是字符串,但不需要被引号包围。
编译器遇到#warning指令输出警告消息,遇到#error指令输出错误消息。

行号指令#line可以改变编译器警告和错误消息报告的行数,笖变编译源文件的文件名,对交互式调试器隐藏一些行,语法如下:

区域指令#region和#end region必须成对出现,允许为一段代码命名,语法如下:

#region Constructors
    MyClass()
    { ... }
    MyClass(string s)
    { ... }
#endregion

区域指令支持嵌套。
区域指令会被编译器忽略,但可以被源代码工具使用。

#pragma warning指令支持关闭和重新开启警告消息,语法如下:

  1. #pragma warning disable 618, 414,下一行开始关闭618和414两个警告消息。
  2. #pragma warning restore 618,下一行开始重新开启警告消息618。
  3. #pragma warning disable,下一行开始关闭所有警告消息。
  4. #pragma warning restore,下一行开始重新开启所有警告消息。