可以在VS2008中在#ifndef ... #endif之类的预处理器指令块中启用智能感知

时间:2010-08-18 18:06:33

标签: c++ visual-studio visual-studio-2008 c-preprocessor intellisense

在C ++库中工作时,我注意到在“#ifndef CLIENT_DLL ... #endif”这样的指令块内部我没有被授予任何智能感知。这显然是由于已经定义了“CLIENT_DLL”。我意识到我可以通过简单地评论指令来解决这个问题。

是否有任何intellisense选项可以启用intellisense而不管指令评估?

5 个答案:

答案 0 :(得分:3)

通过获得你想要的东西,你会失去很多。

Visual C ++ IntelliSense基于几个主要假设 1.你想要好的/可用的结果。 2.您当前的IntelliSense compiland将显示与您当前所处的“配置”相关的信息。

由于您当前的配置具有该预处理器指令,因此您将无法从#ifndef区域获取结果。

如果你仔细考虑,理由是有道理的。如果IntelliSense编译器只是尝试编译您所在的区域,而不管#ifdef区域怎么办?你会得到无意义和不可编译的代码。它无法使你的compiland成为正面或反面。

我可以想象一个非常复杂的解决方案,它在你所在的区域运行一个较小的(新的)解析,只假设该区域是compiland的一部分。然而,这种方法有很多漏洞(就像声明/定义的那个区域一样)这种可能的方法会立即让你感到沮丧,除非是非常简单的场景。

通常最好避免#ifdef区域中的逻辑,而是将参数化编译的用法委托给整个函数,以便编译器的前端始终编译这些模块,但链接器/优化器将选择以后纠正OBJ。

希望有所帮助, 将

答案 1 :(得分:0)

在某些领域,Visual Studio 6.0对C ++有一些更好的支持。如果你需要intellisense然后暂时将它评论出来,构建然后你应该有intellisense。如果这是你的意图,请记得在你通过时重新推荐它。

答案 2 :(得分:0)

我希望Intellisense在VS2008中应该可以工作。 MS“变通办法”大部分时间都不起作用(删除.ncb文件)。哦, here's another SO discussion...,让我们看看IT必须说什么(我只是喜欢这样)

答案 3 :(得分:0)

我也经常对此感到恼火......但我想知道intellisense是否真的能够提供任何有用的信息,一般来说,在条件限制的区块内?

我看到的问题是,如果变量或函数的使用根据预处理器指令的值而改变,那么它的定义也是如此。如果代码浏览功能(如“转到定义”)在条件化块中处于活动状态,您是否希望它们导致当前启用的定义或者与您正在查看的禁用代码相同的预处理器条件禁用的定义在?

我认为“最少惊喜的原则”规定目前的行为是最安全的,尽管很烦人。

答案 4 :(得分:0)

为什么要在代码中明确执行? VS中已经存在cofiguration设置以及启用和解除智能感知的方式。 看到链接。

http://msdn.microsoft.com/en-us/library/ms173379(VS.80).aspx

http://msdn.microsoft.com/en-us/library/ks1ka3t6(v=VS.80).aspx

此链接可能会对您有所帮助。