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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM