【问题标题】:How can I define macros for the C++ intellisense engine?如何为 C++ 智能感知引擎定义宏?
【发布时间】:2018-03-07 00:08:15
【问题描述】:

在使用"Default" intellisense 引擎时,我的 C++ 项目中的某些符号无法解析。事实证明,这是因为它们位于由 #ifdef 保护的标头中,该#ifdef 依赖于通过makefile 传递给gcc 的带有-D 标志的宏。我如何告诉智能感知引擎这些定义,以便它能够编译标头的这些部分?

【问题讨论】:

  • 我认为您唯一能做的就是确保当前配置的定义与您使用 GCC 的定义相匹配...
  • 你在哪里设置当前配置的定义?

标签: c++ visual-studio-code intellisense


【解决方案1】:

到目前为止,其他答案有两个似乎不太容易解决的问题:

  1. 有时不同的源文件需要不同的编译器标志。

  2. 手动找出需要哪些编译器标志并手动添加它们可能会非常乏味。

幸运的是,VS Code 的 C/C++ 扩展支持 compile_commands.json 数据库。这存储特定于每个单独源文件的信息,包括定义、包含目录和其他编译器命令行标志。我刚刚在此处发布了有关如何生成并让 VS Code 使用它的更详细说明:https://stackoverflow.com/a/59618515/12663912

【讨论】:

    【解决方案2】:

    项目生成文件defines 设置在.vscode/c_cpp_properties.json

    "configurations": [
    {
       ...
       "defines":[
           "MYSYMBOL",
           "MYVALUE=1"
       ]
    }
    ], ...
    

    这里有一些打开c_cpp_properties.json的方法:

    1. 在 Intellisense 无法解析的 include 语句之类的内容上查找绿色曲线。将鼠标悬停在周围并单击出现的灯泡(它很小,有点像要单击的游戏)。它将在编辑器中打开项目配置文件。

    2. 同上,但将光标放在绿色曲线上并按Ctrl+.

    3. 使用命令托盘:ctrl+shift+P,然后选择C/C++: Edit configurations (JSON)

    4. 如果该文件已存在于您的 .vscode 文件夹中,请使用 File->Open 打开它。

    虽然修改c_cpp_properties.json后vscode会重新处理设置,但我发现更改值时有时需要重新启动。

    这里有基本的和不完整的信息:https://code.visualstudio.com/docs/languages/cpp

    这是一个关于c_cpp_properties.json 文件本身的好链接:https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference

    【讨论】:

    • 如果您使用 compileCommands JSON 文件,它会使用 JSON 文件中的定义。有没有办法强制定义例如。 intellisense 引擎内部的 INTELLISENSE?
    • 在较新版本的 VSCode 中:文件->首选项->设置->(搜索右侧面板)c_cpp > 默认值:定义
    • 还有办法“取消定义”宏吗?
    【解决方案3】:

    现已添加此功能:https://github.com/Microsoft/vscode-cpptools/issues/304

    您可以在 c_cpp_properties.json 文件中设置“定义”

    【讨论】:

    • 是否可以“自动”填充"defines" 与顶级.config 文件等文件的内容?比如"defines": ["${workspaceFolder}/.config"],
    猜你喜欢
    • 2016-09-03
    • 2018-06-30
    • 2023-04-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多