为什么Q_FOREACH宏会破坏VS2010 intellisense? 我在VS2010中有一个C++项目,QT4.7.4,我经常遇到智能感知问题(我们都这么做……)。一个具体的问题是,有时无法找到函数体(在.cpp文件中)。如果我点击该函数体,下拉框(通常显示您所在的函数)为空
今天,我在添加了为什么Q_FOREACH宏会破坏VS2010 intellisense? 我在VS2010中有一个C++项目,QT4.7.4,我经常遇到智能感知问题(我们都这么做……)。一个具体的问题是,有时无法找到函数体(在.cpp文件中)。如果我点击该函数体,下拉框(通常显示您所在的函数)为空,c++,visual-studio-2010,qt,macros,intellisense,C++,Visual Studio 2010,Qt,Macros,Intellisense,今天,我在添加了foreach()语句(Qt宏Q\u foreach)之后注意到了这种行为。然后,我将foreach()宏替换为对应的for(int I=0;I
foreach()
语句(Qt宏Q\u foreach)之后注意到了这种行为。然后,我将foreach()宏替换为对应的for(int I=0;I<…),IntelliSense立即再次显示该函数
所以我想知道:
您必须使用“cpp.hint”文件的概念 基本上,您必须将麻烦的宏放在名为“cpp.hint”的文件中,并将该文件放在解决方案目录(这对我来说不起作用-可能是非标准项目布局)或代码文件所在的父目录中。(为我工作) 在该文件中,您只需将麻烦的宏放在右边,因此在您的情况下:
#define foreach()
或者更好
#define Q_FOREACH(variable, container)
#define foreach(...)
etc.
请注意,在将定义放入cpp.hint文件后,您可能需要重新扫描、重新启动或摆弄一个函数才能设置效果
更新:事实上,我刚刚发现,我必须对.cpp文件进行一些更改(例如添加新行)才能生效。修复程序不会自动应用
原始链接是:
问题的原因是,如果Intellisense必须解析项目中的所有宏,那么它的性能(可能)会显著降低,因此它只解析“cpp.hint”中显式给出的宏
原始微软文本表示,可以使用“源文件根目录中的路径到包含源文件本身的目录中的任何目录”。在典型的VisualC++项目中,根目录包含解决方案或项目文件。
您可以在“C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\vcpackages”中找到主“cpp.hint”文件以供参考我无法验证它,因为我只有2008年,Intellisense被我们相当大的项目压得喘不过气来,它有太多问题,很难让它正常工作。但我正在做的是:我在QtCreator中开发,在VisualStudio中编译和调试。对我来说,这似乎是两个世界的最佳结合。显然,您需要管理
.pro
文件中的项目,并使用qmake-tp vc-recursive.pro
或visual studio插件转换它们。当您用Q\u foreach
替换foreach()
并指定CONFIG+=no\u关键字时会发生什么?我尝试替换foreach()
由Q\u FOREACH
执行,不起任何作用。恐怕我不知道如何添加无关键字
,因为VS2010中没有.pro
文件。您知道项目属性页中的对应字段是什么吗?然而,no_关键字
意味着我必须用Q_信号
替换所有的signal
——这比重写所有FOREACH()要麻烦得多。看看Q_FOREACH是如何实现的。这是一个混乱的宏和模板为你做一些严重的魔术。我敢打赌VS只是被这种魔力和你传递给它的任何东西的组合绊倒了,还有一个描述它的链接