Intellisense中缺少的功能定义C 2005-2013

Function definitions missing from intellisense in Visual Studio C++ 2005-2013

本文关键字:定义 2005-2013 功能 Intellisense      更新时间:2023-10-16

以下问题困扰着我的项目之一:

一些函数定义(来自.cpp文件)被排除/隐藏在Intellisense中!

对于这些功能,不可能" goto定义",也不可能在 navigation bar 中列出。

但是,功能确实出现在自动完成列表中。问题仅适用于.cpp文件,.h文件可以很好地解析。``宣称宣言''也有效。

自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;
    }
}

下一步将是找到解决方法(或尝试通过Microsoft Bug报告)。

请不要对这个宏太多。这是我无法更改列表实现的现有代码。我只是不使用宏,但我仍然认为这是一个vs bug。

一件有趣的事情是,以下(真正的* ** 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-loop-expression-for-for-for-for-for-duction-definition)

以下工作正常

#define fortest(x)  for( auto x= 1; x< 2; ++x)
void myclass::TestFN()
{
    fortest( g )
        g;
}

像往常一样,对我的问题的兴趣在几个小时后消失了,所以我必须自己弄清楚...

我们只需要使用cpp.hint文件的概念。

基本上,您必须将麻烦的宏放入名为cpp.hint的文件中,然后将该文件放入解决方案目录(对我不起作用)或在您的代码文件驻留的父级指导中。(为我工作)

在该文件中,我们只是将麻烦的宏放在没有右手的情况下,例如:

#define forlist(x,list)

NOTE :您必须重置IntelliSense Cache用于使用更改的cpp.hint文件中的新数据。您应该:

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

对于更高级的宏(例如,对于代码块具有" start"answers" end"宏),还有其他一些技巧。

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

造成麻烦的原因是,如果IntelliSense性能(可能)如果必须解析项目中的所有宏,则(可能)将大大降低,因此仅在'cpp.hint'中明确解析了这些宏。