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 新项目格式与对应框架预定义的宏
2019-8-31-C#-条件编译的更多相关文章
- agentzh 的 Nginx 教程(版本 2019.07.31)
agentzh 的 Nginx 教程(版本 2019.07.31) agentzh 的 Nginx 教程(版本 2019.07.31) https://openresty.org/download/a ...
- ARTS Challenge- Week 1 (2019.03.25~2019.03.31)
1.Algorithm - at least one leetcode problem per week(Medium+) 986. Interval List Intersections https ...
- 2020届京东秋招正式批一面记录-Java开发-2019.08.31
京东一面总结 总共时间持续时间约40分钟 1.你用过集合类里面哪些是线程安全的,哪些是线程不安全的?分别举两个例子? 线程安全:HashTable以及ConcurrentHashMap 非线程安全:A ...
- 牛客CSP-S提高组赛前集训营2 ———— 2019.10.31
比赛链接 期望得分:100+20+20 实际得分:40+20+30 awa cccc T1 :基于贪心的思路,然后开始爆搜(雾 那必然是会死的,好吧他就是死了 #include<iostrea ...
- Beta冲刺(9/7)——2019.5.31
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Beta冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 队 ...
- lyc——2019.10.31
10:判决素数个数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入两个整数X和Y,输出两者之间的素数个数(包括X和Y). 输入 两个整数X和Y(1 <= X,Y <= ...
- Office 2019 2016 安装破解教程
声明:工具由蓝点网提供支持,密钥为本人收集内容,非转载部分 GVLKs for Office 2019 Product GVLK Office Professional Plus 2019 ...
- 工具软件集合 Adobe AE PS Pr CC 2018 2019 破解教程
来源https://mp.weixin.qq.com/s/zeq1sTmaPsKt7Bsok0Ldrg(若链接失效,请关注软件安装管家公众号) 相关链接 Office 2019破解教程 Adobe 2 ...
- NOI2019退役记 upd:2019.12.1
(我把原来写的东西全部删掉了) AFO. 我退役了,\(\mbox{yyb}\)退役了. 至少,在接下来的日子里,我得投身到文化课,度过快乐的高三生活了. 这两年的\(OI\)生涯给了我很多,让我学会 ...
- windows批处理语法
写批处理文件,除了了解基本语法外,你还需要熟悉常用的windows命令,那就先看看这篇文章:windows常用命令 #重要说明 文件及目录路径:要使用反斜杠'\',不要使用正斜杠'/' 如:del d ...
随机推荐
- Flutter-SearchDelegate搜索框
搜索欄 import 'package:flutter/material.dart'; typedef SearchItemCall = void Function(String item); cla ...
- 2019届校招前端面试题整理——HTML、CSS篇
前言 2019届校招陆陆续续开始了,整理了一些高频的面试题. HTML部分 1. 什么是<!DOCTYPE>? DOCTYPE是html5标准网页声明,且必须声明在HTML文档的第一行.来 ...
- LOJ 2840「JOISC 2018 Day 4」糖
有趣的脑子题(可惜我没有脑子 好像也可以称为模拟费用流(? 我们考虑用链表维护这个东西 再把贡献扔到堆里贪心就好了 大概就是类似于有反悔机制的贪心?我们相当于把选中的一个打上一个-v的tag然后如果选 ...
- CSS中的背景用法详解
background 属性是CSS中用于设置元素背景的属性,最简单的background属 性名,是针对背景若干设定的合并简写,最早的CSS只能使用单一背景图片,而在现在却可以设置多个背景图片.而不用 ...
- 使用ant编译Android APK
ANT —— Apache Ant is a Java library and command-line tool that help building software. 1. 部署ANT的使用环境 ...
- 元素隐藏visibility:hidden与元素消失display:none的区别
visibility属性用来确定元素是显示还是隐藏的,这用visibility="visible|hidden"来表示(visible表示显示,hidden表示隐藏). 当visi ...
- [CSP-S模拟测试]:数字(数学+高精度)
题目描述 很简单,给出正整数$n$,求出$n!$在十进制表示下的从最末非零位开始的总共$k$位. 输入格式 第一行一个正整数$T$,表示有$T$组数据接下来$T$行,每行两个正整数$n$和$k$. 输 ...
- php面试专题---MySQL常用SQL语句优化
php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...
- POI 单元格类型CellType
1.单元格类型 单元格的内容决定了单元格的类型,POI中定义的7种单元格类型: 2.示例 cell_0.setCellType(CellType.STRING);//字符串 日期数据对应的单元格类型是 ...
- 不用print调试 xdebug ubuntu phpstorm 远程断点调试
即使这会写php也遵守zebra大人的指示:不用print调试!!!!----环境ok ---gan !!! w http://blog.csdn.net/ty_hf/article/details ...