#if预处理程序指令并不总是崩溃

时间:2014-01-30 18:43:33

标签: c# visual-studio-2010 preprocessor-directive

假设我定义了两个#define预处理器指令:

#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预处理程序指令的行为行为?

3 个答案:

答案 0 :(得分:5)

如果#If测试为假,那么显然所有代码(无论它的结构可能是什么)都是死代码。提供折叠这些部分是有意义的。

如果#If测试为真,则可以包含任意代码。因此,折叠选项基于代码结构。并且在任意#If测试中都没有崩溃。

答案 1 :(得分:4)

Damien_The_Unbeliever的评论是正确的。 VS为当前设置处于非活动状态的部分(灰色部分显示)提供折叠功能,但不为活动部件提供折叠功能。所以,如果我有这个代码:

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

当我将Debug配置激活时,底部部分将是可折叠的,但如果我将其切换到Release,则顶部将变为可折叠(并且底部不可折叠)。

答案 2 :(得分:0)

作为折叠问题和/或个人喜好的一种简单变通方法,值得注意的是,您可以将任何代码块都放在大括号{}中,而VS将使其变成可折叠区域。