關於巨集定義

2021-09-13 14:46:13 字數 1418 閱讀 8359

發現release版本是沒有上面的這些巨集定義,所以準備去unity的playersettings去設定看看,我加了乙個ttt的巨集定義,發現結果還是這樣,如圖下:

發現了debug模式下是有這些亂七八糟的巨集定義的,但是release模型下是沒有的,怎麼辦呢?我準備修改這個檔案試試把debug有的巨集定義全部複製給release,結果發現竟然可以打包並且**也高亮了,如圖下:

事情也算是找到原因了,最後和大家簡單的說一下debug和release的區別,還有用巨集定義和unity的及時執行時判斷平台的區別

debug:除錯版本,包含除錯資訊,所以容量比release大很多,並且不進行任何優化(優化會使除錯複雜化,因為源**和生成的指令間關係會更複雜),便於程式設計師除錯。debug模式下生成兩個檔案,除了.exe或.dll檔案外,還有乙個.pdb檔案,該檔案記錄了**中斷點等除錯資訊

release:發布版本,不對源**進行除錯,編譯時對應用程式的速度進行優化,使得程式在**大小和執行速度上都是最優的。(除錯資訊可在單獨的pdb檔案中生成)。release模式下生成乙個檔案.exe或.dll檔案。

二、obj資料夾的作用

obj目錄中也有debug和release兩個子目錄,obj目錄是專案生成dll的源目錄,然後將生成好的dll複製到bin目錄下。obj用於存放編譯過程中生成的中間臨時檔案。在.net中,編譯時分模組進行的,每個模組的編譯結果都儲存在obj目錄下,最後會合併為乙個.exe或則.dll檔案儲存到bin目錄下。

因為每次編譯都是增量編譯,也就是只重新編譯改變了的模組,所以這個obj目錄的作用就是儲存這些小塊的編譯結果,加快編譯速度。

說到這個其實就是條件編譯和條件語句的區別,#if與if的編譯時期是不同的,#if是編譯器在預編譯**時完成的,編譯器會把#if 與 #endif之間的**編譯進去(注意:不是執行!),if是在程式執行時進行的在程式執行時執行。所以說用巨集定義去判斷平台會比unity的runtimeplatform判斷平台效能要好。

關於巨集定義

一 巨集替換 1.巨集展開的順序 先由外層向內層檢查,直至最內層後依次向外層展開。例外 遇到 開頭的巨集就不再往內檢查,從該層開始往外展開。2.重新掃瞄和替換 在替換列表中的所有引數替換過之後,預處理器將對結果token序列重新掃瞄以便對其中的巨集再次替換。當正在替換的巨集在其替換列表中發現自身時,...

關於巨集定義函式

擷取部分內容 使用帶引數的巨集定義可完成函式呼叫的功能,又能減少 系統開銷,提高執行效率。正如c語言中所講,函式的使用可以使程式更加模組化,便於組織,而且可重複利用,但在發生函式呼叫時,需要保留呼叫函式的現場,以便子 函式執行結束後能返回繼續執行,同樣在子函式執行完後要恢復呼叫函式的現場,這都需要一...

關於巨集定義 x y

最近看原始碼的時候發現了乙個這個巨集定義 difine oppconcat1 x,y x y。表示一臉懵逼,查詢之後發現,是乙個變數名連線的用法,x y表示的就是xy這個變數。注意是名字連線,不是變數數值的連線。舉個栗子 include using namespace std define test...