VS2010中的C ++ Intellisense

时间:2011-08-01 11:29:17

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

全部,

我对Intellisense for C ++项目有一个奇怪的问题。背景:我最近安装了VS2010 Sp1,并且在SQL Server 2008 R2中丢失了Intellisense。我按照建议尝试安装累积更新7(CU7),但这不起作用。但是,重新安装SQL Server 2008 R2。然后我使用CU7更新了SQL Server 2008 R2并且一切都很好。现在,Intellisense适用于C#项目,但现在对于C ++项目来说它并没有完全正常工作(注意:C ++项目 C ++ / CLI)。

我已禁用预编译标题(“未使用预编译标题”)并具有以下内容:

#include <cmath>
#include <complex>
#include <iostream>
#include "stdafx.h"
#include "globals.h"

using namespace std;

注意:我知道使用std命名空间并不总是被认为是最佳实践,但在这里它将节省我很多时间,并且没有模棱两可的可能性。

所以现在当我想要一个printf语句时,如果我输入printf,我得到的不是Intellisense提示符。但是,如果我按Ctrl + Space或Ctrl + J Intellisense识别该命令,它就会显示出来。以下是智能感知不能自动工作的图像。

enter image description here

现在,如果输入std :: printf,则显示Intellisense:

enter image description here

有没有办法让VS2010 / Intellisense知道我想使用std命名空间,因为它似乎只是没有识别“#using namespace std;”命令。

非常感谢。

3 个答案:

答案 0 :(得分:2)

根据您的#include列表判断,printf()尚未宣布。毕竟,它已在<stdio.h> / <cstdio>中声明。

所以Intellisense是不对的。 ;)

在顶部添加#include <stdio.h>的优点是不需要using namespace std;,因为<stdio.h>将名称放在全局名称空间中(也可能在std ::名称空间中) )。

UPDATE :这并不能解释为什么在输入“std :: pri”后会出现“std :: printf”。

UPDATE2 :经过测试,很明显当ctrl-space强制建议printf。也许问题是为什么Intellisense不会自动弹出?

答案 1 :(得分:2)

注意:我的第二个答案。基于Cory Nelson的评论,所以我不会要求信用。

如果我理解正确,您希望在输入“p”时弹出Intellisense。

答案是:不,VS2010不会这样做

Intellisense将为“:: p”或“std :: p”启动,但不会为普通的“p”启动。这与预编译的标头有,也没有#include顺序。它不会。

我过去使用的一些IDE在这种情况下有一个启用/禁用完成的设置(我记得在某些C ++ Builder版本中看到过),但我在VS2010中找不到它。

那么为什么VS2010不允许呢?关键字可能导致不值得解决的问题,但这是否是原因?我不知道。也许VS团队的成员可以对此有所了解。

<强>更新

我在一个新的VS2010项目中测试了这个程序:

#include <string>
using namespace std;

int main()
{
    stri
}

输入“stri”时没有弹出窗口。

“string”出现在ctrl-space之后的弹出窗口中,当我删除using namespace std;时它不存在,因此它正确地对using作出反应。

输入::后,Intellisense激活并在::s建议SA_AccessType后(来自文件sourceannotations.h),因此列表显然预先填充了许多系统标题。

如果我输入if并强制弹出Intellisense,则列表中没有if。如果我然后输入(,就好像我想要输入if(一样,它会更正为ifstream(。因此,如果Intellisense总是弹出,那么键入关键字会更加困难。

答案 2 :(得分:1)

只有在按下ctrl + space后才会出现这种类型的C ++ intellisense。

商业扩展程序Visual Assist X提供的体验可能更符合您的需求(请注意,Visual Studio的快速版本不支持它。)