Visual Studio C ++ 2005-2013中智能感知中缺少的函数定义

时间:2014-01-31 12:34:54

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

以下问题困扰了我的一个项目很长一段时间:

从智能感知中排除/隐藏某些功能定义(来自.cpp文件)

这些功能无法“转到定义”,也不会在导航栏中列出。

但是,这些功能确实出现在自动填充列表中。问题仅在于.cpp文件,.h文件被解析得很好。 “Goto宣言”也有效。

自2005年以来,这是相同的,每个新版本,我都希望能够修复,但它似乎没有被任何其他人认定为错误。

更新 我已将此跟踪到以下内容:intellisense无法识别包含某个宏的所有函数。原始宏是

#define forlist(x,list) for( auto x= list.begin(); x.valid(); ++x)

但您也可以使用简化的测试用例

#define fortest(x)  for( auto x= 1; x< 2; ++x)

void myclass::TestFN()
{
    fortest( g )
    {
        g;
    }
}

下一步是找到解决方法(或尝试通过micrsoft错误报告)。

请不要对此宏咆哮太多。这是列表实现的现有代码,我无法更改。我可能不会使用宏,但我仍然认为这是一个VS错误。

一个有趣的事情是,以下(真的 * ** ic宏)工作正常:

#define fortest(x)  for( auto x= 1; x< 2; ++x) {

void myclass::TestFN()
{
    fortest( g )
        g;
    }
}

intellisense是否可以将案例1视为非法的本地函数定义? (见http://connect.microsoft.com/VisualStudio/feedback/details/781121/c-intellisense-mistakes-loop-expression-for-function-definition

以下工作也很好

#define fortest(x)  for( auto x= 1; x< 2; ++x)

void myclass::TestFN()
{
    fortest( g )
        g;
}

1 个答案:

答案 0 :(得分:20)

像往常一样,对我的问题的兴趣在几个小时后消失了,所以我不得不自己解决这个问题......

我们必须使用cpp.hint文件的概念。

基本上你必须把麻烦的宏放到一个名为cpp.hint的文件中,并将该文件放在你的解决方案目录中(这对我不起作用) 或者在代码文件所在的父目录中。(为我工作)

在那个文件中我们只是把麻烦的宏放在右边,所以例如:

#define forlist(x,list)
  

注意:您必须重置IntelliSense缓存才能使用已更改的cpp.hint文件中的新数据。你应该:

     
      
  • 删除ipch文件夹(通常放在解决方案文件夹中)。
  •   
  • 删除解决方案文件夹中的所有* .sdf文件。
  •   
  • 删除解决方案文件夹或ipch文件夹中的所有* .VC.db文件。
  •   

对于更高级的宏(例如,为代码块设置&#39; start&#39;和&#39; end&#39;宏),还有其他一些技巧。

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

麻烦的原因是,如果必须解析项目中的所有宏,Intellisense性能会(可能)显着降低,因此它只解析那些在cpp.hint&#39;中明确给出的那些。