虽然问题提到了 Arduino,但以下建议基本上适用于任何时候 VSCode 告诉您“更新您的 includePath”。
什么是includePath?
includePath 是c_cpp_settings.json 中的一个属性,它位于您在VSCode 中使用文件→打开文件夹打开的主文件夹的.vscode 文件夹中。
您可以直接编辑c_cpp_settings.json,但通常使用“C/C++ 配置 GUI”更容易。为此,请打开命令面板 (Ctrl+Shift+P) 并运行“C/C++:编辑配置 (UI)”。然后寻找“包含路径”设置。
includePath 告诉 VSCode(特别是 C/C++ extension 的 IntelliSense 组件)在解析 #include "filename" 指令时要查找的位置。这允许 VSCode 查看这些文件中定义的符号的定义。
那么当 VSCode 告诉我时,我应该摆弄 includePath 吗?
一开始没有!在更改包含路径之前,如果您尚未更改包含路径,请先将“编译器路径”设置为指向您的 C/C++ 编译器,并设置“智能感知模式”以尽可能匹配编译器。
您可能还需要调整编译器参数,尤其是当编译器能够为多个目标生成代码时,例如 32 位和 64 位代码。 (如果您不知道这意味着什么,请先跳过它。)
接下来,在命令面板中,运行“C/C++:日志诊断”。输出将显示 VSCode 找到了哪个编译器,以及它检测到的内置包含路径和预处理器定义的内容。
然后,在 shell 中运行这些命令:
$ touch empty.c
$ gcc -v -E -dD empty.c
在这里,我假设您使用gcc 作为编译器。如果不是,请替换实际的编译器命令名称。如果您的编译器不是 GCC 的变体(例如,您使用的是 Microsoft cl.exe 编译器),您需要查看其文档或 Google 以查找打印预定义宏和包含路径的开关(例如,见herecl.exe)。
将上述命令的输出与 VSCode 在其 C/C++ 诊断输出中显示的内容进行比较。希望它们非常相似。如果不是,请尝试调整编译器路径、智能感知模式或编译器参数。通过仅调整这三个设置使它们尽可能接近后,继续下一步。
现在根据需要调整 includePath
如果编译器内置配置与 VSCode 检测到的配置之间仍然存在显着差异,请通过(在 C/C++ 设置 UI 中)修改包含路径、定义和 C/C++ 标准字段来解决此问题。重新运行 C/C++ Log Diagnostics 命令查看效果。
可能没有必要添加所有预定义的预处理器符号。仅当存在依赖于它们的 #ifdef 指令并且导致 VSCode 将错误代码视为活动代码时,这才真正重要。我建议仅在浏览代码时发现 VSCode 出错的特定情况时才添加预定义符号。
最后,如果您的项目在编译器默认不搜索的地方有头文件,也就是说,您通常必须在编译器命令行上传递-I 开关,将它们也添加到包含路径中。任何-D 参数也是如此,必须将其添加到定义中。