在我的项目中,有一个包含在ifdef预处理程序指令
中的文件#ifdef SOME_SYMBOL
... entire file ...
#endif
SOME_SYMBOL由在此之前编译的另一个文件定义,并且代码按预期工作,但静态分析器不知道此符号,因此它处理SOME_SYMBOL未定义。整个文件没有语法突出显示,只是跳过了一些分析(例如语法错误突出显示)。
有没有办法告诉分析仪将此符号视为已定义但未在CMakeLists.txt中定义?
我没有选择在CMakeLists.txt中定义SOME_SYMBOL,因为项目取决于它在某些编译路径中未定义(更改这几乎是不可能的)。
更新:
似乎这是JetBrains目前的一个悬而未决的问题。见Issue CPP-2286
答案 0 :(得分:1)
获取语法突出显示: 转到设置⇒编辑器⇒颜色和字体⇒C/ C ++并删除“有条件的非编译代码”的所有刻度。这样,所有代码都会显示通常的突出显示。
答案 1 :(得分:1)
Clion现在有一个可以用来检测IDE的宏: https://youtrack.jetbrains.com/issue/CPP-1296#comment=27-1846360
#ifdef __JETBRAINS_IDE__
// Stuff that only clion will see goes here
#endif
这允许你输入定义来使clion正确地渲染你的代码,以防它无法巧妙地弄明白。
__JETBRAINS_IDE__
宏的值是IDE的版本字符串。针对不同的Jetbrains IDE存在特定版本的宏:__CLION_IDE__
,__STUDIO_IDE__
(适用于Android Studio)和__APPCODE_IDE__
(适用于AppCode)。
耶!
注意:在撰写本文时,这仅适用于最新的CLION EAP。
答案 2 :(得分:0)
该任务没有针对常见情况的解决方案。 但!您可以找到定义SOME_SYMBOL的目标和相关解析上下文。