Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

#if preprocessor directive doesn't always collapse

Say I define two #define preprocessor directives:

#define TEST
#define TESTOFF

Now my code is organized in TEST and TESTOFF #if directives, e.g.:

#if TEST
    ...
#endif

...MORE CODE...

#if TESTOFF
    ...
#endif

It often happens that one #if region, say the #if TEST region, becomes collapsible while the other (#if TESTOFF region) is not.

Since this is a strange phenomenon that some might've never encountered, I'm appending a snapshot of the issue in question: Alternating collapsible #if regions

Does anyone know what parameters define this behavior behavior of the #if preprocessor directive?

like image 925
seebiscuit Avatar asked Sep 12 '25 16:09

seebiscuit


2 Answers

If the #If test is false, then obviously all of the code within (no matter what it's structure may be) is dead code. It makes sense to offer to collapse these sections.

If the #If test is true, then arbitrary code may be contained within. So the collapse options are based on the code structure. And no collapse is offered on the arbitrary #If test.

like image 64
Damien_The_Unbeliever Avatar answered Sep 14 '25 08:09

Damien_The_Unbeliever


Damien_The_Unbeliever's comment is correct. VS provides the collapse feature for sections that are inactive with your current settings (the parts that are shown in gray), and does not provide them for the active parts. So if I had this code:

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

The bottom part would be collapsible while I have the Debug configuration active, but the top would become collapsible (and the bottom un-collapsible) if I switch it over to Release.

like image 35
JLRishe Avatar answered Sep 14 '25 08:09

JLRishe