Visual Studio Code 编译 C 文件时出现 #include errors
排障赵师傅
结论
如果头文件和 main.c 在同一目录,使用双引号引用:
#include "my_header.h"
还需要在 c_cpp_properties.json 的 includePath 中添加当前工作区根目录,也可以直接添加头文件所在目录。${workspaceFolder}/** 理论上已经涵盖工作区内的子目录。如果仍然报错,可能是打开的工作区有误、头文件不在该工作区内,或代码使用了尖括号引用。
推荐配置
假设目录结构如下:
project/
├── main.c
└── my_header.h
在 VS Code 中打开 project 文件夹,并将 .vscode/c_cpp_properties.json 配置为:
{
"configurations": [
{
"name": "windows-gcc-x64",
"includePath": [
"${workspaceFolder}",
"${workspaceFolder}/**"
],
"compilerPath": "C:/mingw64/bin/gcc.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-gcc-x64",
"compilerArgs": []
}
],
"version": 4
}
代码中的头文件引用写法如下:
#include "my_header.h"
int main(void)
{
return 0;
}
Windows 路径写成 C:/mingw64/bin/gcc.exe 即可,无需写成 C://mingw64/bin/gcc.exe。compilerArgs 中也不要保留空字符串,暂时没有参数时使用空数组。
头文件位于子目录时
如果目录结构如下:
project/
├── src/
│ └── main.c
└── include/
└── my_header.h
可以在 includePath 中直接添加 include 目录:
"includePath": [
"${workspaceFolder}",
"${workspaceFolder}/include"
]
代码中仍然这样引用:
#include "my_header.h"
实际编译时,需要向 GCC 提供同样的搜索路径:
gcc -Iinclude src/main.c -o main.exe
c_cpp_properties.json 只影响 VS Code C/C++ 扩展的 IntelliSense、代码补全和错误波浪线,不会自动修改 GCC 的编译命令。编辑器和编译器使用的是两套配置,因此两边的检查结果可能不同。
为什么同目录头文件仍可能报错
可以依次检查以下内容:
- 确认使用
#include "my_header.h",而不是#include <my_header.h>。双引号形式会先在当前源文件所在目录中查找。 - 确认 VS Code 打开的是整个项目文件夹,而不是单独打开
main.c。否则${workspaceFolder}可能无法指向预期目录。 - 检查文件名与引用是否完全一致。例如,实际文件名为
My_Header.h,代码中却写成了my_header.h。 - 检查当前选中的 C/C++ 配置是否为
windows-gcc-x64。 - 确认
C:/mingw64/bin/gcc.exe存在,并与当前 MinGW-w64 的安装位置一致。 - 修改配置后,在命令面板中执行
C/C++: Reset IntelliSense Database,或重新加载 VS Code 窗口。
头文件与源文件在同一目录时,通常只需添加 ${workspaceFolder} 并使用双引号引用。若配置中已有 ${workspaceFolder}/**,但错误依然存在,应先检查工作区根目录和 #include 的写法,无需继续增加通配路径。
备注:内容仅供参考。
