繁体   English   中英

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

[英]Can intellisense be enabled in VS2008 within preprocessor directive blocks like #ifndef … #endif

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

是否存在智能感知选项,无论指令评估如何都能实现智能感知?

得到你想要的东西,你会失去很多。

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

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

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

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

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

希望有所帮助,威尔

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

我只是希望Intellisense在VS2008中应该会运行。 MS“变通办法”大部分时间都不起作用(删除.ncb文件)。 噢, 这是另一个SO讨论...... ,让我们看看IT有什么要说的(我只是喜欢这样)

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

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

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

为什么要在代码中明确地执行? 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

这个链接可以帮到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM