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 ,可用于此目的。

原文地址:https://www.cnblogs.com/Fflyqaq/p/13657498.html