在 VS Code 中使用 Arduino 时,IntelliSense 会引发 #include 错误

ar-*_*std 4 c++ intellisense arduino include visual-studio-code

我想在 VS Code 中开发 Arduino 代码。因此,我安装了 Arduino IDE 和 VS Code 的 Arduino 扩展。

在 VS Code 中打开 Arduino 项目后,扩展为 IntelliSense 创建了以下c_cpp_properties.json文件(摘录):

"includePath": [
        "/Applications/Arduino.app/Contents/Java/tools/**",
        "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/**"
],
"forcedInclude": [
        "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h"
],
Run Code Online (Sandbox Code Playgroud)

强制包含Arduino.h具有以下相关包含:

// Some includes
#include <avr/pgmspace.h>
// Even more includes
Run Code Online (Sandbox Code Playgroud)

问题是,尽管pgmspace.h确实存在,但它并不位于相对路径中Arduino.h(它也不位于两个包含路径之一中)。将 的路径添加pgmspace.h到包含路径并没有帮助,因为 IntelliSense 似乎正在寻找给定的相对路径。

我的问题是是否有可能通过文件告诉 IntelliSensec_cpp_properties.json忽略相对路径并仅查找文件?或者你能想出另一种方法来解决这个问题吗?

ar-*_*std 7

我自己找到了答案。如果您遇到同样的问题,请尝试以下操作:

添加settings.json

"C_Cpp.intelliSenseEngine": "Tag Parser"
Run Code Online (Sandbox Code Playgroud)

这是一个缺点,因为“标签解析器”不具有上下文感知能力。

添加c_cpp_properties.json

"configurations": [
  {

    ...,

    "browse": {
      "path": [
        "/Applications/Arduino.app/Contents/Java/tools",
        "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr",
        "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include"
      ],
      "limitSymbolsToIncludedHeaders": true
    }
  }
]
Run Code Online (Sandbox Code Playgroud)