[SOP]5分钟搭建vscode的C和C++环境
2026/1/16大约 7 分钟
[SOP]5分钟搭建vscode的C和C++环境
术语表
- IntelliSense,智能代码提示
- 在 VS Code 里你经常会看到 IntelliSense 这个词。它其实是 微软对“智能代码提示功能”的统称,不是某个单独的插件。
- 用大白话说,IntelliSense = 智能补全 + 参数提示 + 错误检查 + 跳转导航。
- workspace,工作区
- 进入vscode官网:https://code.visualstudio.com/
1、在 C 语言里,IntelliSense 要正确工作的前提:装微软提供的C/C++插件,配.vscode/c_cpp_properties.json
注意:在 C 语言里,IntelliSense 要正确工作,必须让 VS Code 知道你的编译器和头文件路径(这就是我们前面配置 c_cpp_properties.json 的目的)。
否则它会找不到标准库的函数声明,比如 printf、malloc 就不会提示。
2、安装你的编译器、链接器之类的[省略]
这不是本教程的重点
3、安装3个vscode和C/C++相关的插件
- C/C++(Microsoft 出品,提供 IntelliSense、调试、代码提示),带来了新的配置文件:
.vscode/c_cpp_properties.json- 插件官网:https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools
- C/C++ 插件(微软出品),它自己会在
.vscode/下生成c_cpp_properties.json,主要是给 IntelliSense(智能提示、跳转、错误检查)用的。
- CMake Tools(Microsoft 出品,如果你用CMake 构建)
- Code Runner(formulahendry出品的,可选,快速运行单个文件)
- Code Runner 插件 → 它本身不在工作区生成配置文件,而是统一用 VS Code 的
settings.json来存配置。
- Code Runner 插件 → 它本身不在工作区生成配置文件,而是统一用 VS Code 的
4、配置.vscode/c_cpp_properties.json和.vscode/settings.json
主要有这几块要配置
| 编译器路径,用于生成项目来启用更准确的 InteliSense 的编译器的完整路径,例如 /usr/bin/gcc。扩展将查询编译器以确定要用于 IntelliSense的系統是否包含路径和默认定义。 | compilerPath |
包含路径, include 路径是包括源文件中随附的头文件(如 #include "myHeaderFile.h")的文件夹。指定 IntelliSense 引擎在搜索包含的头文件时要使用的列表路径。对这些路径进行的搜索不是递归搜索。指定 ** 可指示递归搜索。例如,````{workspaceFolder} 则不会。如果在安装了 Visual Studio 的 Windows 上,或者在 compilerPath 设置中指定了编译器,则无需在此列表中列出系统 include 路径。 每行一个包含路径。 | includePath |
IntelliSense 模式, 要使用的 IntelliSense 模式,该模式映射到 MSVC、gcc 或 Clang 的平台和体系结构变体。如果未设置或设置为 ````{default} 模式。仅指定 ````-```` 变体(例如 gcc-x64)的 IntelliSense 模式是旧模式,它们会根据主机平台自动转换为 ````-````-```` 变体。 | intelliSenseMode |
修改.vscode/c_cpp_properties.json的方法1【纯代码】
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/opt/compiler/gcc-12/bin/gcc",
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}比如
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/include",
"/usr/include",
"/usr/local/include"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}- configurations:这是一个配置数组,你可以为不同的平台和环境定义多个配置!
- 官网说了写法:https://code.visualstudio.com/docs/cpp/configure-intellisense
| name | 配置的名称,例如 Win32, Linux, Mac, Custom 等,方便区分和选择。【随便你自己叫什么名字,比如本地mac,阿里云Linux】 |
| includePath | 头文件搜索路径。在解析代码时,VSCode 会在这些路径中搜索头文件。支持使用占位符和环境变量,如 ${workspaceFolder} 表示当前工作区的根目录,或 ${workspaceFolder}/** 表示递归包含所有子目录。 |
| defines | 定义预处理器宏。例如 _DEBUG, UNICODE, MY_DEFINE=1 等,模拟编译器预定义宏。 |
| compilerPath | 指定C/C++编译器的路径,VSCode将使用它来获取编译器相关信息。例如,C:/MinGW/bin/gcc.exe 或 /usr/bin/gcc |
| intelliSenseMode | 设置 IntelliSense 模式,通常根据编译器和架构选择,常见值包括 gcc-x64, gcc-arm64, msvc-x64, clang-x64, clang-arm64 |
| cStandard | 设置C标准,支持的值有 c89, c99, c11, gnu11 等。 |
| cppStandard | 设置`C++`的标准,支持的值有`c++98, c++11, c++14, c++17, c++20,gnu++11,gnu++17` 等。 |
修改.vscode/c_cpp_properties.json的方法2【可视化】
如果想可视化配置de/c_cpp_properties.json这个文件,你也可以去全局命令面板(按下快捷键ctrl+shift+p,或者是cmd+shift+p),搜索找到C/C++ Edit Configurations(UI)
小技巧:这种vscode的编辑配置,基本上都有一个是UI一个是JSON
C/C++: Edit Configurations (UI)
- 用可视化的方式去调整底层的:
.vscode/c_cpp_properties.json
- 用可视化的方式去调整底层的:
C/C++: Edit Configurations (JSON)
- 直接使用vscode的代码编辑器打开:
.vscode/c_cpp_properties.json
- 直接使用vscode的代码编辑器打开:
5、配置settings.json
常见的 Code Runner 配置项
{
// 运行语言对应的命令
"code-runner.executorMap": {
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir/$fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir/$fileNameWithoutExt"
},
// 在终端里运行,而不是输出窗口
"code-runner.runInTerminal": true,
// 保存文件再运行
"code-runner.saveFileBeforeRun": true
}附录1、智能代码提示(IntelliSense)做的事情有哪些?
举例:在 C 语言里它能做的事情包括:一旦下面有哪个不对,你就去排查这个C/C++插件和.vscode/c_cpp_properties.json文件就准没错!
- **自动补全,**输入
pri→ 自动提示printf。 - **参数提示,**输入
printf(→ 弹出参数列表,告诉你需要什么类型的参数。 - **语法错误/警告提示,**比如漏了分号、变量没声明,会红线提示。
- 跳转/查看定义,
Ctrl + 点击函数名→ 跳到函数定义。 F12/右键 → Go to Definition。- **悬停提示,**鼠标移到函数上 → 显示它的声明和文档注释。
- 智能搜索,
Ctrl+T或Ctrl+P→ 快速查找函数、变量、文件。
附录2、你可能问,我配置过vscode的python和go环境很简单,那为什么就cpp 的工作区复杂呢?为什么 C/C++ 要多一个 c_cpp_properties.json?
来一张对比表,把 VS Code 常见语言的 运行 + IntelliSense 配置方式梳理一下:
VS Code 常见语言配置对比
| 语言 | 编译/运行方式 | IntelliSense 来源 | 配置文件 | 额外说明 |
|---|---|---|---|---|
| C / C++ | 调用 gcc/g++/clang/msvc | C/C++ 插件(Microsoft),依赖编译器环境 | .vscode/c_cpp_properties.json | 必须告诉插件编译器路径、头文件路径、标准版本,否则红波浪线/提示缺失 |
| Go | 调用 go run | gopls(Go 官方 LSP) | 只用 settings.json | 工具链统一(go |
| Python | python xxx.py | Pylance / Jedi(语言服务器) | 只用 settings.json | 只需要指定 Python 解释器路径,环境(venv/conda)自动解析 |
| Java | 调用 javac | Language Support for Java(RedHat 插件)+ JDK | .vscode/settings.json | 如果用 Maven/Gradle,插件会自动识别依赖,不需要专门 JSON |
| JavaScript / TypeScript | Node.js 或浏览器 | tsserver(内置语言服务) | 只用 settings.json | IntelliSense 内置,不需要额外配置;TS 会识别 tsconfig.json |
| Rust | cargo run | rust-analyzer | 只用 settings.json | 工具链统一(Cargo),依赖和环境由 Cargo.toml |
总结
- 其他语言(Go、Python、Java、Rust…):有 统一的工具链 & 官方语言服务器 (LSP),VS Code 插件直接接入所以不需要单独 JSON。而C/C++是个特例他们的生态是碎片化的,所以必须有个 额外的配置文件 (
c_cpp_properties.json) 来帮 IntelliSense 对齐编译环境。
举例:
1、Go 插件(gopls 支持)→ 直接读 settings.json(VS Code 通用配置),没有单独的 json
2、C/C++ 插件(微软出的)→ IntelliSense 依赖一个额外的配置文件:c_cpp_properties.json
C/C++ 语言太“碎片化”的表现
- 不同编译器(gcc/clang/msvc)行为差异大
- C 标准有 c89/c99/c11/c17 …
- 头文件位置也不统一(Linux 在
/usr/include,Windows 用 MSVC SDK,交叉编译器更乱) - 所以微软的 C/C++ 插件必须要一个地方专门告诉它编译环境,否则 IntelliSense 根本没法判断符号位置。 于是有了
c_cpp_properties.json,相当于「本地编译器环境说明书」。
Go 语言天生“自洽”
- Go 官方工具链统一:只有
go命令(不分 gcc/clang) - Go 有固定的工作区结构(
go.mod、go.sum) - 所有依赖和标准库的位置,
gopls(Go 语言服务器)都能自动解析 - VS Code 插件只需要调用
gopls→ 就能拿到完整的 IntelliSense 信息,不需要额外的配置文件。 - 所以 Go 插件只要写在
settings.json就行,不需要go_properties.json这种东西。