C#预编译
在C#开发中经常会遇到在Debug和Release模式下需要执行不同代码的情况,这个时候使用C#条件编译可以很好地解决这个问题,如
#if DEBUG
// TO Do Debug Mode Code
#else
// TO Do Release Mode Code.
#endif
使用这种方法,可以在Debug模式下,执行debug模式的代码,而在非Debug模式下执行下面的代码。其中DEBUG宏变量的定义,操作如下:打开程序的属性,在Build中,有一个CheckBox:“Define DEBUG constant”,把这个钩钩去掉之后就没有DEBUG了,如果打上勾就有了。
当然也可以自己定义宏变量(预编译指令),如
#define DEBUG
#undefine DEBUG
1. 预编译指令必须在代码文件的开头就定义,否则就有语法错误;
2. 条件编译指令有以下4种
#if
#elif
#else
#endif
这些条件编译指令用来有条件的将部分程序段包括进来或排除在外。他们和c#中的if语句有类似的作用。
条件编译符号有两种可能的状态:已定义的或未定义的。在源文件词法处理开始时,条件编译符号除非已由外部机制(如命令行编译器选项)显式定义,否则是未定义的。
他们在程序中的出现的先后顺序必须是这样:
一条#if语句(必须有)
零或多条#elif语句
零或一条#else语句
一条#endif语句(必须有)
3.Conditional条件编译
当调用标记为条件的方法时,指定的预处理符号的存在或不存在决定是否包含或省略此调用。如果定义了该符号,则包含调用;否则省略调用。使用 Conditional 是封闭 #if 和 #endif 内部方法的替代方法
classDebug
{
staticvoidMain(string[] args)
{
Print1();
Print2();
Print3();
Console.ReadLine();
}
//定义了debug才执行
[Conditional("DEBUG")]
staticvoid Print1()
{
Console.WriteLine("Print1");
}
//定义了debug或者trace后才执行
//或者的关系
[Conditional("DEBUG"), Conditional("Trace")]
staticvoid Print2()
{
Console.WriteLine("222222222222222222222222");
}
//只有定义了Debug和Trace后才会执行此方法
[Conditional("DEBUGAndTrace")]
staticvoid Print3()
{
Console.WriteLine("33333333333333333333333333333333");
}
}
预编译语法参考:
#define 使您得以定义符号,这样,通过将该符号用作传递到 #if 指令的表达式,该表达式将计算为 true。
#define symbol 其中:symbol要定义的符号名称。备注 符号可用于指定编译的条件。可以用 #if 或 #elif 来测试符号。还可以使用 conditional 属性执行条件编译。
可以定义符号,但是无法对符号赋值。#define 指令必须在使用任何也不是指令的指令之前出现在文件中。
也可以用 /define 编译器选项定义符号。可以用 #undef 取消定义符号。
用 /define 或 #define 定义的符号与具有同一名称的变量不冲突。即,不应将变量名传递到预处理器指令,并且只能用预处理器指令计算符号。
用 #define 创建的符号的范围是在其中定义该符号的文件。
相关文章
- C#Lite Unity热更新开源解决方案改名C#Light
- C#【必备技能篇】VS2019 使用C/C++ 生成DLL 文件,并用 C/C++、C#调用DLL
- c#实例-子线程查找另一线程模态对话框句柄(invoke测试)
- C#调用mingw编译出来的动态链接库实例(建议使用MSVC编译的)
- C#中Monitor和Lock的用法区别
- c#中已知一个外部窗口的句柄,怎么关闭
- .Net CCNet C#6.0 自动化编译问题解决
- 一个完整的类用来读取OpenSSL生成的pem格式的x509证书(C#)
- 如何在没有装VS(Visual Studio)的机器上编译运行C#程序
- C++, Java和C#的编译过程解析
- C#MongoDB 分页查询的方法及性能
- C# 查找一组数(子数组)每个元素在(另一组数)父数组的索引
- C#-How to use less than sign and greater than sign symbols in xml query?
- C# WinForm实现窗体上控件自由拖动功能示例-OK
- C#事件理解
- 理解 C# 项目 csproj 文件格式的本质和编译流程
- C#项目中使用Log4net日志工具