1. 程式人生 > 實用技巧 >C# #if、#endif和預處理指令

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