为CLion分析器定义预处理器符号

Neo*_*ard 13 preprocessor analysis clion

在我的项目中,有一个ifdef预处理器指令中包含的文件

#ifdef SOME_SYMBOL
... entire file ...
#endif
Run Code Online (Sandbox Code Playgroud)

SOME_SYMBOL由在此之前编译的另一个文件定义,并且代码按预期工作,但静态分析器不知道此符号,因此它对待SOME_SYMBOL未定义.整个文件没有语法突出显示,只是跳过了一些分析(例如语法错误突出显示).

有没有办法告诉分析器将此符号视为已定义,而不在CMakeLists.txt中定义它?

我没有在CMakeLists.txt中定义SOME_SYMBOL的选项,因为项目依赖于它在某些编译路径中未定义(更改这几乎是不可能的).

更新:
似乎这是目前JetBrains的一个未解决的问题.见问题CPP-2286

Chr*_*ing 7

Clion 现在有一个可用于检测 IDE 的宏: https://youtrack.jetbrains.com/issue/CPP-1296#comment=27-1846360

#ifdef __JETBRAINS_IDE__
    // Stuff that only clion will see goes here
#endif
Run Code Online (Sandbox Code Playgroud)

这允许您放入定义,以使 clion 在无法足够聪明地弄清楚代码的情况下正确呈现您的代码。

__JETBRAINS_IDE__宏的值是 IDE 的版本字符串。对于不同的 Jetbrains IDE,存在特定版本的宏:__CLION_IDE____STUDIO_IDE__(对于 Android Studio)和__APPCODE_IDE__(对于 AppCode)。

耶!


小智 4

要获得语法突出显示:\n转到“设置”\xe2\x87\x92“编辑器”\xe2\x87\x92“颜色和字体”\xe2\x87\x92 C/C++,然后删除“有条件非编译代码”的所有勾选。这样,所有代码都会以通常的突出显示方式显示。

\n

  • 对于最新的 2020 CL​​ion,它是:Settings / Editor / Color_Scheme / C/C++:删除“Conditionally non-compiled code”的“Foreground”勾号 (3认同)