有没有一个预处理宏,可以让代码对Visual Studio Code的解析器不可见?
在几个C++的集成开发环境中(例如JetBrains CLion和 Eclipse CDT),内置的解析器能够识别一个特殊的预处理器定义,它可用于设定某些特定选项或在解析时排除部分代码。 (这些是CDT的 __CDT_PARSER__ 和CLion的 __JETBRAINS_IDE__ 的做法。)
在Visual Studio Code使用的标准,或最常用的C++工具链组件的解析器,是否也有类似的预处理器定义?
解决方案
如果你在VSCode的 C/C++扩展上使用它,可以在 .vscode/c_cpp_properties.json 上自行定义它:
{
"configurations": [
{
"name": "Linux",
"intelliSenseMode": "linux-gcc-x64",
"compilerPath": "/usr/bin/g++-15",
"defines": [
"__VSCODE__=1"
]
}
],
"version": 4
}
现在编辑一个像这样的文件:
#ifdef __VSCODE__
constexpr auto x = 1;
#else
constexpr auto x = 2;
#endif
static_assert(x == 1);
你会发现VSCode的静态断言处有一个错误波浪线,但如果按通常方式编译,则没有错误。
备选方案
微软的C++插件为IntelliSense定义了 __INTELLISENSE__,就像VS那样。因此你不需要自定义宏。
另一方面,Clangd并不会定义任何编译器本身没有的新宏。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。