C# #如果预处理器指令不';不要总是崩溃
假设我定义了两个#define预处理器指令: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 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不,我并没有混淆这两个不同的指令,但我确实同意我描述的现象很奇怪。我更新了一张照片。过来看。