预处理指令
预处理指令(preprocessor directive)指示编译器如何处理源代码。
在C#中没有实际的预处理程序,预处理指令由编译器来处理。
基本规则:
- 预处理指令必须和C#代码在不同的行。
- 不需要以分号结尾
- 每一行必须以
#
符号开始,#符号前后都可以有空格 - 允许行尾注释
- 预处理指令所在行不允许分隔符注释(/*分隔符注释 */)
#define与#undef
#define
用于声明一个编译符号,#undef
用于取消定义一个编译符号。
只能用在源文件的开头(using前),不能在代码中间定义。
编译符号是只有两种可能状态的标识符,被定义
或未被定义
。
它可以是除了“true”和“false”以外的任何标识符,包括C#关键字和在代码中声明的标识符。
它没有值。
范围仅限于单个源文件,允许重复定义已存在的标识符。
条件编译 #if #else #elif #endif
条件编译:根据编译符号是否被定义,标注一段代码被编译还是被跳过。
true和false也可以在表达式中使用。
#if
和#endif
需要配对使用。
诊断指令
诊断指令产生用户自定义的编译时警告以及错误消息。
语法:
#warning Message //Message是字符串,不需要引号
#error Message
行号指令 #line
■ 可以改变由编译器警告和错误消息报告出现的行数;
■ 可以改变编译源文件的文件名;
■ 可以对交互式调试器隐藏一些行;
等。
区域指令 #region #endregion
#region和#endregion匹配使用,区域可以被嵌套。
#region 区域名
// 代码段
#region 子区域名
//代码段
#endregion
#endregion
#progma warning指令
#progma warning指令设置关闭及重新开启警告消息。
- 关闭
#progma warning disable, 警告数列表
- 开启
#progma warning restore, 警告数列表
若不指定警告数列表,则指令应用于所有警告。