2014-01-30 48 views
2

說我定義了兩個#define預處理程序指令:#如果預處理指令並不總是崩潰

#define TEST 
#define TESTOFF 

現在我的代碼是在測試組織TESTOFF #if指令,如:

#if TEST 
    ... 
#endif 

...MORE CODE... 

#if TESTOFF 
    ... 
#endif 

經常發生一個#if區域,例如#if TEST區域變得可摺疊,而另一個(#if TESTOFF區域)則不可摺疊。

由於這是一個奇怪的現象,有些人可能從來沒有遇到過,我追加問題的快照問題: Alternating collapsible #if regions

有誰知道什麼參數定義#if預處理指令的這種行爲行爲?

+0

我不這麼認爲,有可能崩潰#if - #endif。這是代碼的一部分。你不能摺疊代碼。您只能摺疊區域和定義。甚至屬性都是突出的 –

+0

發佈有效的代碼,這不會編譯。也不會崩潰。它也不應該。 –

+0

爲什麼你會抱怨僞代碼不能編譯?這與問題完全無關。 – Magus

回答

5

如果#If測試是錯誤的,那麼顯然所有的代碼(不管它的結構可能是什麼)都是死代碼。提供摺疊這些部分是有道理的。

如果#If測試爲真,那麼可能在其中包含任意代碼。所以摺疊選項基於代碼結構。並且在任意#If測試中不提供崩潰。

4

Damien_The_Unbeliever的評論是正確的。 VS爲當前設置(部分以灰色顯示)不活動的部分提供摺疊功能,並且不爲活動部分提供這些功能。所以,如果我有這樣的代碼:

#if DEBUG 
    string a = "2"; 
    string b = "3"; 
#else 
    string a = "3"; 
    string b = "3"; 
#endif 

的底部將是可摺疊的,而我有調試配置活躍,但上方將成爲可摺疊(和底部未可摺疊),如果我切換它交給釋放。