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

时间:2017-09-25 22:23:07

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

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

3 个答案:

答案 0 :(得分: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://github.com/Microsoft/vscode-cpptools/blob/master/Documentation/LanguageServer/c_cpp_properties.json.md

答案 1 :(得分:1)

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

  

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

答案 2 :(得分:1)

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

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

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

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