为什么Q_FOREACH宏会破坏VS2010的智能感知?

Mar*_*ngs 6 c++ macros intellisense qt visual-studio-2010

我在Q20 4.7.4的VS2010中有一个c ++项目,我经常遇到IntelliSense问题(正如我们所做的那样......).一个特定的问题是有时无法找到函数体(在.cpp文件中).如果我单击该函数体,下拉框(通常显示您所在的函数)为空.

今天我在添加一个foreach()语句(Qt宏Q_FOREACH)后立即注意到了这种行为.然后我用相应的替换了foreach()宏,for(int i = 0; i < ...)并且IntelliSense 再次立即显示该函数.

所以我想知道:

  1. 有人可以验证这种行为并在评论中告诉我吗?
  2. 为什么会这样?
  3. 是否有一种解决方法可以让我继续使用Q_FOREACH?

nuu*_*nuu 8

您必须使用'cpp.hint'文件的概念.

基本上,您必须将麻烦的宏放入名为'cpp.hint'的文件中并将该文件放在您的解决方案目录中(这对我来说不起作用 - 可能是非标准项目布局)或者在父目录中放置您的代码文件驻留在.(为我工作)

在那个文件中你只是把麻烦的宏放在右边,所以在你的情况下:

#define foreach()
Run Code Online (Sandbox Code Playgroud)

或者更好

#define Q_FOREACH(variable, container)
#define foreach(...)
etc.
Run Code Online (Sandbox Code Playgroud)

注意,在将定义放入cpp.hint文件后,您可能需要重新扫描或重新启动或使用函数来设置效果.

更新:事实上,我刚刚发现,我必须对.cpp文件进行一些更改(例如添加新行)才能启动效果.修复程序不会自动应用.

原始链接是:http: //msdn.microsoft.com/en-us/library/dd997977.aspx

出现问题的原因是,如果必须解析项目中的所有宏,Intellisense性能会(可能)显着降低,因此它只解析那些在'cpp.hint'中明确给出的宏.

原始的Microsoft文本说您可以使用"从源文件的根目录到包含源文件本身的目录的路径"中的任何目录.在典型的Visual C++项目中,根目录包含解决方案或项目文件. "

您可以在'C:\ Program Files(x86)\ Microsoft Visual Studio 12.0\VC\vcpackages'中找到主要的'cpp.hint'文件以供参考