簡體   English   中英

#if 預處理器指令並不總是崩潰

[英]#if preprocessor directive doesn't always collapse

假設我定義了兩個 #define 預處理器指令:

#define TEST
#define TESTOFF

現在我的代碼組織在 TEST 和 TESTOFF #if 指令中,例如:

#if TEST
    ...
#endif

...MORE CODE...

#if TESTOFF
    ...
#endif

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

由於這是一個有些人可能從未遇到過的奇怪現象,因此我將附上有關問題的快照:交替可折疊 #if 區域

有誰知道什么參數定義了#if預處理器指令的這種行為?

如果#If測試為假,那么顯然其中的所有代碼(無論其結構如何)都是死代碼。 提供折疊這些部分是有意義的。

如果#If測試為真,則其中可能包含任意代碼。 所以折疊選項是基於代碼結構的。 並且在任意#If測試中不提供折疊。

Damien_The_Unbeliever 的評論是正確的。 VS 為當前設置無效的部分(顯示為灰色的部分)提供折疊功能,而不為活動部分提供折疊功能。 所以如果我有這個代碼:

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

當調試配置處於活動狀態時,底部將是可折疊的,但如果我將其切換到 Release,頂部將變得可折疊(而底部不可折疊)。

作為解決折疊問題和/或個人偏好的簡單解決方法,值得注意的是,您可以將任何代碼塊括在大括號 {} 中,VS 將使其成為可折疊區域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM