为什么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立即再次显示该函数

所以我想知道:

  • 有人能证实这一行为并在评论中告诉我吗
  • 为什么会发生这种情况
  • 是否有一种变通方法可以让我继续使用Q_FOREACH

  • 您必须使用“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只是被这种魔力和你传递给它的任何东西的组合绊倒了,还有一个描述它的链接