如何为 C++ 智能感知引擎定义宏?

Posted

技术标签:

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

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

【问题讨论】:

我认为您唯一能做的就是确保当前配置的定义与您使用 GCC 的定义相匹配... 你在哪里设置当前配置的定义? 【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

"configurations": [

   ...
   "defines":[
       "MYSYMBOL",
       "MYVALUE=1"
   ]

], ...

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

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

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

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

    如果该文件已存在于您的 .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"],

以上是关于如何为 C++ 智能感知引擎定义宏?的主要内容,如果未能解决你的问题,请参考以下文章

nmake:如何为包含重新定义宏?

如何为无状态 React 组件创建 TypeScript 类型定义?

如何为 nvcc 添加预定义宏?

Visual Studio C++ 2005-2013 中的智能感知缺少函数定义

如何为使用未知变量调用的对象获取智能感知?

如何为从 .vue 中的别名导入的模块方法获取智能感知