C# #if、#endif和预处理指令
#if、#else、#eif、#endif
以前自己做开发的时候,基本没有怎么用过C#的#if之类的预处理指令。实习了之后,发现项目中C#代码部分用了很多预处理指令。所以学习了一下。
这几个#if的用法和if-else语句差不多,都是如果满足条件则会执行。但不同的是这里往往使用的是预处理指令。
举个小栗子:使用系统内置指令
一般可以让不同的版本或者不同的平台执行一些不同的测试代码,来帮助我们调试。
//VS会在编写代码时就自动判断出将会执行哪个代码块,并把不会执行的置灰。(VS牛批!!!)
//当游戏处于编辑器阶段即还未发布时(可以在VS中改变调试的模式为Release)
#if DEBUG
Debug.Log("当前是编辑器模式");
#else
Debug.Log("当前不是编辑器模式");
#endif
#define、#undef
使用#define我们可以自定义指令。
使用#undef可以取消定义的指令。
注意:
- define指令需要放在using之前使用
- define指令不能用于声明常量值
举个小栗子:自定义指令
//定义放在using之前
#define TEST
using ***
//执行代码部分
#if TEST
//当我们注释掉定义时,VS中代码块内容也会自动置灰
Debug.Log("你好呀");
#endif
系统内置预处理指令总结
官网地址:https://docs.unity3d.com/2019.1/Documentation/Manual/PlatformDependentCompilation.html
Unity支持的平台#define指令如下:
从Unity 2.6.0开始,你可以有选择地编译代码。可用的选项取决于您正在编辑的编辑器的版本。给定版本号XYZ(例如,2.6.0),Unity公开以下格式的三个全局#define指令:UNITY_X,UNITY_X_Y和UNITY_X_Y_Z。
从Unity 5.3.4开始,您可以根据Unity编译或执行给定代码所需的最早版本的Unity来选择性地编译代码。给定与上述(XYZ)相同的版本格式,Unity 将以UNITY_X_Y_OR_NEWER格式公开一个全局#define ,可用于此目的。