2019-8-31-C#-条件编译
title | author | date | CreateTime | categories |
---|---|---|---|---|
C# 条件编译
|
lindexi
|
2019-08-31 16:55:58 +0800
|
2019-07-18 15:27:12 +0800
|
C#
|
有一部分代码只是用来调试使用,不期望在发布的时候执行。也有一些代码只是用来测试性能,也不期望在其他时候使用。在做源代码包的时候,我需要对不同的平台使用不同的代码。此时就可以用到条件编译符,在不同的条件下编译不同的代码
和 C++ 差不多,在 C# 里面也有宏的概念,只是在 C# 里面的专业名词是条件编译符
通过 #if
#else
这些预处理器指令,可以指定使用不同的代码参加编译
用法是在 #if
后面跟上条件判断逻辑,只要条件判断逻辑返回 true 那么在 #if
包含的范围内的代码将会参加编译
在 #if
包含的范围内指的是在 #if
和下一个 #else
或 #elif
或 #endif
指令之间的范围,和普通的条件判断逻辑相同
#if NET45 // 添加代码
// 如果定义了 NET45 这个宏,那么在这个范围内的代码将会参加编译 #elif NET46 // 如果没有定义 NET45 这个宏,那么将会进入这个分支的判断,如果定义了 NET46 这个宏那么在这个范围内的代码将会参加编译 #else // 在上面的判断都不成立的时候,在这个范围内的代码将会参加编译 #endif
上面是使用最长的判断代码,而更多的只是其中的组合,如 #if xx
和 #endif
的代码
例如我指定了在 DEBUG 模式,也就是调试模式下执行和发布模式不同的输出
public void Foo()
{
#if DEBUG
Console.WriteLine("Debug version");
#endif
}
在有定义 DEBUG 宏的编译时候,也就是一般在调试的时候,将会编译下面代码
public void Foo()
{
Console.WriteLine("Debug version");
}
而在没有定义 DEBUG 条件编译符的时候,将会编译下面的代码
public void Foo()
{ }
可以注意到 Console.WriteLine("Debug version");
没有在没有定义 DEBUG 的时候参加编译,这段代码将被忽略
这样就是预处理器指令命名的原因,表示在编译之前做的指令
在进行判断是否进行编译的时候,支持使用复杂的条件判断,包括使用运算符 ==
(相等)和 !=
(不相等)判断逻辑,在使用运算符的左边是对应的宏,右边是 true 和 false 两个值,其中 true 表示存在这个宏的定义,如下代码
#if DEBUG == true
#endif
上面代码的 #if DEBUG == true
和 #if DEBUG
是等价写法
另外还支持运算符 &&
(and) ||
(or) 和 !
(not) 连接多个判断
此时的 #if DEBUG == false
和 #if !DEBUG
是等价判断
在使用连接符号的时候,支持添加 ==
等判断运行符,也支持直接写条件编译符,如下代码
#if NET45 || DEBUG == true
// 在 NET45 定义或 DEBUG 定义的时候,这个范围内的代码可以执行
#endif
多个条件同时判断可以使用括号包含判断,请看代码
#if NET46 || (DEBUG == true && NET47)
#endif
在定义了 NET46 或同时定义了 DEBUG 和 NET47 编译范围代码
更多预定义宏请看dotnet 新项目格式与对应框架预定义的宏
最新文章
- Java EE必读书籍
- nginx-nginx脚本
- easyUI跨Tab操作datagrid
- Objective-C 再谈OC指针,对比C++/Java/Swift
- 从0开始学Java——@override的作用
- 【CF】86 B. Petr#
- UML造型——使用EA时序图工具的开发实践和经验
- attr与prop的区别
- 《JAVASCRIPT高级程序设计》window/location/navigator/screen/history对象
- mysql 数据库查看表的信息
- bzoj1031(sa)
- PIVOT 行列相转
- 升级python(linux)
- centos7升级内核
- BZOJ1899或洛谷2577 [ZJOI2005]午餐
- yii开发第一部分之执行流程
- C#程序集系列06,程序集清单,EXE和DLL的区别
- Log4Net基本配置
- 判断radiobutton是否被选中
- DGIS之遥感影像数据获取
热门文章
- js关于小数点失精算法修正0.07*100竟然=7.000000000000001
- phpstorm 生产php pojo类
- windows2008R2-AD域控组策略设置与其它相关设置
- 【leetcode】394. Decode String
- jquery用法第二波
- java.lang.unsatisfiedLinkError:找不到指定的程序
- [WC2012]记忆中的水杉树
- 问题记录-java图片验证码显示乱码
- composer proc_open(): fork failed – Cannot allocate memory
- HDU6668 Polynomial(模拟)