vscode 智能感知不起作用

vscode Intellisense not working

本文关键字:不起作用 感知 智能 vscode      更新时间:2023-10-16

我刚刚下载了Linux ubuntu 14.04的Visual Studio代码。我创建了一个简单的测试.cpp并用 vscode 编写它,智能感知不起作用。

以下是测试中的代码.cpp:

struct test{
int a = 5;
}
int main(){
test t;
t.
}

当我写"t."时,没有智力告诉我t的成员,应该有。

我使用命令"touch test.cpp"在linux终端中创建了test.cpp文件,然后我用Visual Studio代码打开test.cpp并编写了代码。截图可以在这里看到:https://i.stack.imgur.com/fLhSA.png

有人知道如何让智能感知在 Linux 中为 vscode 工作吗?

正如其他人建议的那样,您现在可以添加 C/C++ 扩展。

扩展可能会遇到以下两个问题:

扩展不会检测自定义库:

您必须添加自定义库的包含路径。执行以下操作:

Ctr + 移位 + P

C/C++ 扩展:配置

包含路径(例如,每行添加一个路径)

${workspaceFolder}/**
/home/me/Documents/my_custom_lib/

扩展突然停止,不再为您提供任何建议:

如果不打开项目根目录,而是打开它的子项,则可能会发生这种情况。打开项目根文件夹并重新加载窗口。

以下内容主要适用于使用 ROS1 的情况,使用 vscode 的 C/C++ 扩展:

在文件.vscode/c_cpp_properties.json(由 VSCode ROS 扩展名生成)中,尝试从"cppStandard": "gnu++14"更改为"cppStandard": "c++14"

该文件看起来像这样:

{
"configurations": [
{
"browse": {
"databaseFilename": "",
"limitSymbolsToIncludedHeaders": true
},
"includePath": [
"/home/user/catkin_ws/devel/include/**",
"/opt/ros/melodic/include/**",
...,
"/usr/include/**"
],
"name": "ROS",
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++14"
}
],
"version": 4
}

ROS使用的是c ++ 14标准,因此指定gnu++14似乎破坏了事情。这是从这个问题中推断出来的。

存在此问题(现已关闭)。

没有内部智能感知,但有一个 C/C++ 插件。 最近它停止为我工作。 我卸载并重新安装, 并且转到定义现在可以工作了。

我在VSCode(使用C/C++插件)以及其他具有自动完成/智能感知功能的C IDE上注意到依赖于静态代码分析,使用嵌套函数确实混淆了静态代码分析器并导致自动完成之类的事情停止工作。

我刚刚有一个 VS Code 项目,我已经工作了一段时间,展示了这一点。重新启动智能感知或VSCode iteslf并没有修复它,但是我注意到它实际上不仅在我正在处理的主文件中起作用。在其他具有帮助程序功能、库功能等的文件中。自动完成工作正常。

我删除了我的嵌套函数并将其替换为goto cleanup;模式(常见,但我一直喜欢onReturn();作为嵌套方法以避免使用goto模式)。但是我现在可以看到嵌套函数确实会干扰静态代码分析/自动完成。

我删除了嵌套函数,将其替换为goto cleanup;,瞧,智能感知开始运行良好。

因此,在像我一样喜欢在 C 中使用嵌套函数的奇怪情况下,这通常会绊倒静态代码分析器/智能感知。

clangd插件

C++,我使用clangd插件取得了非常好的结果:https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd 它将 clangd 集成到 vscode 中。

该插件使用 clang 解析代码基于compile_commads.json

数据库,该数据库包含构建系统生成的确切编译命令,该插件使用 clang 基于compile_commads.json数据库解析代码,该数据库包含构建系统生成的确切编译命令,因此往往会产生最准确的结果。

我已经在以下位置更详细地介绍了它的设置:VSCode"转到定义"不起作用

在撰写本文时,支持的语言表示C++没有智能感知。