Visual Studio

VS preprocessor directives and configurations

張蔚廷 2018/05/04 17:05:18
392

VS preprocessor directives and configurations


簡介

使用preprocessor directives(前置處理器指示詞)+configurations(組態)以保留debug的code或者適應多種狀況

作者

張蔚廷


 前言

 在使用VS進行開發時,我們通常最少會使用Debug/Release兩種組態(configuration),而若客戶有其他需求導致需要有不同的組態,最少兩種的情況下由於各自都還需要兩種組態,這會使得我們的程式碼容易混淆甚至要大量註解,此時使用前置處理器指示詞(preprocessor directives)就可以解決這個問題。
 
 

從新的組態談起

建立一個新的專案(以下以Xamarin Android專案為例子),打開VS的組態調整我們會看到預設的Debug以及Release兩種組態。
 
 
現在我們假定這個專案的客戶需要一個額外的測試環境,而這個測試環境我們也必須自行測試以及發布,所以我們需要四種組態,分別是Debug Normal(正常環境下跑的專案我們自身使用的Debug模式)/Release Normal(發佈給客戶在正常環境下執行的模式)/Debug Test(客戶測試環境下我們自身使用的Debug模式)/Release Test(發佈給客戶在測試環境下執行的模式)。
在這種情況下我們需要拷貝Debug模式以及Release模式各一次然後改名(範例為加上Test)來完成第一步,點擊上圖中的copy鈕分別複製組態並將新的組態更名。
 
 
結果如上圖。
 
接著我們點開Droid專案的project options中的compiler可以看到如下圖的狀態。
 
 
可以看到Debug以及新複製的Debug Test的定義符號(define symbol)都有 DEBUG;,而Release以及Release Test沒有,這邊的define symbol就是搭配前置處理器指示詞使用的定義符號。我們接著來修改它以符合這次的範例。
 

定義符號的調整

 接著我們將不同的 configuration中的Release Test以及Debug Test增加 TEST;定義符號,如下圖。
 
 
定義符號可以是多個或者零個,例如上圖中的Debug Test就有多個定義符號,Release則沒有。
 

使用前置處理器指示詞搭配不同組態

 下一步我們使用前置處理器指示詞來分別不同組態所需要的程式碼,如下圖。
 
現在使用的是Debug組態,可以看到藉由#if / #elif (=else+if) / #else的前置處理器指示詞來判斷哪些程式碼區塊有被執行。
如此一來,不管專案需求有多少種需要判斷的程式碼,我們只要使用前述辦法就可以藉由轉換組態一次解決,而不需要使用註解這種容易產生錯誤的方式。
Debug組態測試結果如下圖:
 
張蔚廷