VSCode 使用 C++ 的智能感知 headers
VSCode intellisense with C++ headers
我搜索过这个,但我找不到任何东西。如果是骗局,我会毫无问题地关闭我的问题。我在 VSCODE
中有一个 c_cpp_properties.json 配置文件
{
"configurations": [
{
"name": "Mac",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
},
{
"name": "Linux",
"includePath": [
"/usr/include/x86_64-linux-gnu/c++/5",
"/usr/include/c++/5",
"/usr/local/include",
"/usr/include/x86_64-linux-gnu",
"/usr/include",
"${workspaceRoot}"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include/x86_64-linux-gnu/c++/5",
"/usr/include/c++/5",
"/usr/local/include",
"/usr/include/x86_64-linux-gnu",
"/usr/include",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
},
{
"name": "Win32",
"includePath": [
"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include",
"${workspaceRoot}"
],
"defines": [
"_DEBUG",
"UNICODE"
],
"intelliSenseMode": "msvc-x64",
"browse": {
"path": [
"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include/*",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 2
}
我正在 Ubuntu 16.04 中开发。我面临的问题是,当我输入 .cpp 文件时,headers 的智能感知不起作用。
MyFooClass.h
#pragma once
#include <cstddef>
#include <fstream>
#include <string>
class MyFooClass
{
private:
//My private fields
public:
MyFooClass();
virtual ~MyFooClass();
bool MyFooFunction();
};
当我使用
实现MyFooClass.cpp时
#include "MyFooClass.h"
Intellisense 不适用于 .h 中的函数和数据在我看来,这应该在我的配置中默认启用,但我不知道是否必须添加新的东西。非常感谢。
如果您仍然感兴趣或者有人使用 Google 偶然发现了这个线程:
VSC 必须为 auto-completion 使用两个不同的引擎。
1. 遗产 "Tag Parser"
2. 智能感知引擎
后者是此时的默认方案,"Tag Parser"是后备方案。正如您假设的那样,两者都在 c_cpp_properties.json
中配置。 browse
中的路径仅由 Tag Parser 递归搜索和使用,而 includePath
中的路径不递归搜索并由 IntelliSense 引擎使用。
鉴于您的 header MyFooClass.h
不直接位于根文件夹中,而是位于子文件夹 include
中,您必须将 "${workspaceRoot}/include"
添加到您的 includePath
为了有一个有效的 IntelliSense 代码完成。
如今,他们对此有更好的文档:
https://github.com/Microsoft/vscode-cpptools/blob/master/Documentation/LanguageServer/c_cpp_properties.json.md
我搜索过这个,但我找不到任何东西。如果是骗局,我会毫无问题地关闭我的问题。我在 VSCODE
中有一个 c_cpp_properties.json 配置文件{
"configurations": [
{
"name": "Mac",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
},
{
"name": "Linux",
"includePath": [
"/usr/include/x86_64-linux-gnu/c++/5",
"/usr/include/c++/5",
"/usr/local/include",
"/usr/include/x86_64-linux-gnu",
"/usr/include",
"${workspaceRoot}"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include/x86_64-linux-gnu/c++/5",
"/usr/include/c++/5",
"/usr/local/include",
"/usr/include/x86_64-linux-gnu",
"/usr/include",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
},
{
"name": "Win32",
"includePath": [
"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include",
"${workspaceRoot}"
],
"defines": [
"_DEBUG",
"UNICODE"
],
"intelliSenseMode": "msvc-x64",
"browse": {
"path": [
"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include/*",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 2
}
我正在 Ubuntu 16.04 中开发。我面临的问题是,当我输入 .cpp 文件时,headers 的智能感知不起作用。
MyFooClass.h
#pragma once
#include <cstddef>
#include <fstream>
#include <string>
class MyFooClass
{
private:
//My private fields
public:
MyFooClass();
virtual ~MyFooClass();
bool MyFooFunction();
};
当我使用
实现MyFooClass.cpp时#include "MyFooClass.h"
Intellisense 不适用于 .h 中的函数和数据在我看来,这应该在我的配置中默认启用,但我不知道是否必须添加新的东西。非常感谢。
如果您仍然感兴趣或者有人使用 Google 偶然发现了这个线程:
VSC 必须为 auto-completion 使用两个不同的引擎。 1. 遗产 "Tag Parser" 2. 智能感知引擎
后者是此时的默认方案,"Tag Parser"是后备方案。正如您假设的那样,两者都在 c_cpp_properties.json
中配置。 browse
中的路径仅由 Tag Parser 递归搜索和使用,而 includePath
中的路径不递归搜索并由 IntelliSense 引擎使用。
鉴于您的 header MyFooClass.h
不直接位于根文件夹中,而是位于子文件夹 include
中,您必须将 "${workspaceRoot}/include"
添加到您的 includePath
为了有一个有效的 IntelliSense 代码完成。
如今,他们对此有更好的文档: https://github.com/Microsoft/vscode-cpptools/blob/master/Documentation/LanguageServer/c_cpp_properties.json.md