C# #如果预处理器指令不';不要总是崩溃

C# #如果预处理器指令不';不要总是崩溃,c#,visual-studio-2010,preprocessor-directive,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区域)则不可折叠 由于这是一种奇怪的现象,有些人可能从未遇到过,因此我在此附上有关问题的

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

#define TEST
#define TESTOFF
现在,我的代码被组织在TEST和TESTOFF#if指令中,例如:

#if TEST
    ...
#endif

...MORE CODE...

#if TESTOFF
    ...
#endif
通常情况下,一个
#if
区域(例如
#if TEST
区域)变得可折叠,而另一个(
#if TESTOFF
区域)则不可折叠

由于这是一种奇怪的现象,有些人可能从未遇到过,因此我在此附上有关问题的快照:

有人知道是什么参数定义了
#if
预处理器指令的这种行为吗?

如果
#if
测试为false,那么显然,其中的所有代码(无论其结构如何)都是死代码。建议折叠这些部分是有意义的


如果
#如果
测试为真,则其中可能包含任意代码。因此,折叠选项基于代码结构。在任意的
#If
测试中没有提供折叠。

Damien\u不信者的评论是正确的。VS为使用当前设置处于非活动状态的截面(以灰色显示的零件)提供折叠功能,而不为活动零件提供折叠功能。如果我有这个代码:

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

当调试配置处于活动状态时,底部将是可折叠的,但是如果我将其切换到Release,则顶部将是可折叠的(底部将是不可折叠的)

作为解决问题和/或个人偏好的简单方法,需要注意的是,您可以将任何代码块用大括号{}包装,而VS将使其成为可折叠区域。

我认为,不可能折叠#if-#endif。这是代码的一部分。你不能折叠代码。只能折叠区域和定义。即使属性超过了post有效代码,也无法编译。也不会崩溃。你为什么要抱怨伪代码不能编译呢?这与所问的问题完全无关。@T.s.起初我也这么认为。但是,突然之间,我在
#if
#endif
块中有了可折叠的区域。我添加了一张图片来澄清。@GrantWinney不,我并没有混淆这两个不同的指令,但我确实同意我描述的现象很奇怪。我更新了一张照片。过来看。