2014-01-30 6 views
2

Say я определяю две директивы #define препроцессора:#if препроцессора директива не всегда разрушаться

#define TEST 
#define TESTOFF 

Теперь мой код организован в TEST и 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 

Нижняя часть будет сборно-разборной, а у меня есть конфигурация Debug активна, но сверху станет сборно-разборными (а нижняя ун-разборный), если я переключить его освободить.

Смежные вопросы