nuu*_*nuu 11 c++ intellisense visual-studio visual-c++
以下问题困扰了我的一个项目很长一段时间:
一些函数定义(来自.cpp文件)被从智能感知中排除/隐藏!
这些功能无法" 转到定义 ",也不能在导航栏中列出.
但是,这些功能确实出现在自动完成列表中.问题仅在于.cpp文件,.h文件被解析得很好."Goto宣言"也有效.
这是自2005年以来的相同,每个新版本,我都希望能够修复,但它似乎没有被任何其他人认定为错误.
更新: 我已将此跟踪到以下内容:intellisense无法识别包含某个宏的所有函数.原来的宏是
#define forlist(x,list) for( auto x= list.begin(); x.valid(); ++x)
Run Code Online (Sandbox Code Playgroud)
但您也可以使用简化的测试用例
#define fortest(x) for( auto x= 1; x< 2; ++x)
void myclass::TestFN()
{
fortest( g )
{
g;
}
}
Run Code Online (Sandbox Code Playgroud)
下一步是找到一种解决方法(或尝试通过micrsoft bug报告).
请不要对这个宏咆哮太多.这是列表实现的现有代码,我无法更改.我可以不使用宏,但我仍然认为这是一个VS错误.
一个有趣的是,以下(真正的***ic宏)工作正常:
#define fortest(x) for( auto x= 1; x< 2; ++x) {
void myclass::TestFN()
{
fortest( g )
g;
}
}
Run Code Online (Sandbox Code Playgroud)
可能是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;
}
Run Code Online (Sandbox Code Playgroud)
nuu*_*nuu 20
像往常一样,对我的问题的兴趣在几个小时后消失了,所以我不得不自己解决这个问题......
我们只需要使用cpp.hint文件的概念.
基本上你必须将麻烦的宏放入一个名为的cpp.hint文件中并将该文件放在解决方案目录中(这对我不起作用)或者在你的代码文件所在的父目录中.(为我工作)
在那个文件中我们只是把麻烦的宏放在右边,所以例如:
#define forlist(x,list)
Run Code Online (Sandbox Code Playgroud)
注意:您必须重置IntelliSense缓存才能使用已更改
cpp.hint文件中的新数据.你应该:
- 删除
ipch文件夹(通常放在Solution文件夹中).- 删除Solution文件夹中的所有*.sdf文件.
- 删除解决方案文件夹或
ipch文件夹中的所有*.VC.db文件.
对于更高级的宏(比如代码块的'start'和'end'宏),还有其他一些技巧.
原始链接是:http: //msdn.microsoft.com/en-us/library/dd997977.aspx
出现问题的原因是,如果必须解析项目中的所有宏,Intellisense性能会(可能)显着降低,因此它只解析那些在'cpp.hint'中明确给出的宏.
| 归档时间: |
|
| 查看次数: |
4536 次 |
| 最近记录: |