PAYATHON 2026

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 的编译命令。编辑器和编译器使用的是两套配置,因此两边的检查结果可能不同。

为什么同目录头文件仍可能报错

可以依次检查以下内容:

  1. 确认使用 #include "my_header.h",而不是 #include <my_header.h>。双引号形式会先在当前源文件所在目录中查找。
  2. 确认 VS Code 打开的是整个项目文件夹,而不是单独打开 main.c。否则 ${workspaceFolder} 可能无法指向预期目录。
  3. 检查文件名与引用是否完全一致。例如,实际文件名为 My_Header.h,代码中却写成了 my_header.h。
  4. 检查当前选中的 C/C++ 配置是否为 windows-gcc-x64。
  5. 确认 C:/mingw64/bin/gcc.exe 存在,并与当前 MinGW-w64 的安装位置一致。
  6. 修改配置后,在命令面板中执行 C/C++: Reset IntelliSense Database,或重新加载 VS Code 窗口。

头文件与源文件在同一目录时,通常只需添加 ${workspaceFolder} 并使用双引号引用。若配置中已有 ${workspaceFolder}/**,但错误依然存在,应先检查工作区根目录和 #include 的写法,无需继续增加通配路径。

备注:内容仅供参考。