- #define 和 #undef
//存在给定名称的符号 //类似于变量声明,没有真正的值,只是存在而已 #define DEBUG //删除符号 #undef DEBUG
声明的符号不是实际代码的一部分,而只在编译器编译代码时存在。在C#代码中它没有任何意义。
如果符号不存在,#undef就没有任何作用。同样,如果符号存在,则#define也不起作用。
必须把#define 和 #undef 命令放在C#源文件的开头位置,在声明要编译的任何对象的代码之前。
#define本身并没有什么作用,但与其他预处理指令(特别是#if)结合使用,它的功能就非常强大了。
- #if、#elif、#else和#endif
#if DEBUG Console.WriteLine("Debug!"); #endif DEBUG
这段代码会像往常一样编译,由于Console.WriteLine命令包含在#if子句内。这行代码只有在前面#define命令定义了符号DEBUG后才执行。
一般是在调试时定义DEBUG符号,把与调试相关的代码放在#if子句中。这称为条件编译。
#elif(=else if)和#else指令可以嵌套在#if块中,含义非常直观。
#define DEBUG #define RELEASE void DoSomething() { #if DEBUG //DEUBG符号执行的代码 #if RELEASE //内嵌语句 #endif //结束#if RELEASE #elif ERROR //else if ERROR符号执行的代码 #else //无匹配符号执行 #endif//结束 }
#if和#elif还支持一组逻辑运算符“!”、“==”、“!=”和“||”。如果符号存在,就为true,否则为false。
#if DEBUG && (RELEASE==false)
- #warning和#error
#warning "警告消息" #error "错误消息"
两个非常有用的预处理指令,当编译器遇到它们时,会分别产生警告或错误。功能有点像Java中的log4J插件。
在VS中警告和错误消息是显示在错误列表视图中的。
- #region和#endregin
#region name //代码段 #endregion
折叠代码块是日常编程中使用较频繁的。
没有什么特殊的含义,就是一组可以被编译器识别的指令,使代码在屏幕上更好的布局。
- #line
//number行号 filename文件名 #line number "filename" //还原默认行号 #line default //允许编译器跳过该指令与下一个不包含hidden选项的#line指令之间的行 #line hidden
#line指令可以为它所在的文件设置行号和文件名。编译过程中如果出现错误或警告就会用到这里的行号和文件名。
#line主要用于调试和特殊的应用程序。
- #pragma
#pragma warning disable //禁用警告 void Cale()
{ int num;//未初始化的变量 }
#pragma warning restore //还原警告
#pragma可以抑制或还原指定的编译警告。
以上例子中num变量在IDE中本来是会出现绿色波浪线的警告,但由于#pragma的声明就不会产生警告信息。
C#中有趣的预处理指令
最新推荐文章于 2023-01-09 19:54:30 发布