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

19

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

#ifdef SOME_SYMBOL
... entire file ...
#endif

SOME_SYMBOL由另一个文件定义,该文件在此文件之前被编译,代码按预期工作,但静态分析器不知道该符号,因此它会将SOME_SYMBOL视为未定义。整个文件没有语法突出显示,并且某些分析被跳过(例如语法错误突出显示)。

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

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

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


1
有可能需要找到适当的文件包含上下文。如果您有可见的状态栏,可以在右下角看到“上下文:”下拉列表。只需尝试一些即可。 - uta
3个回答

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

这样做可以定义使clion在无法自动识别代码时正确呈现它的内容。 __JETBRAINS_IDE__ 宏的值是IDE版本字符串。不同Jetbrains IDE有特定版本的宏:__CLION_IDE____STUDIO_IDE__(适用于Android Studio),以及__APPCODE_IDE__(适用于AppCode)。
太棒了!

4
为了得到语法高亮: 进入设置菜单 ⇒ 编辑器 ⇒ 颜色与字体 ⇒ C/C++,并取消所有“有条件的非编译代码”的勾选。这样所有的代码都将以通常的方式进行高亮显示。

谢谢,但我找不到任何标题类似于“有条件的非编译代码”的复选框。 - Neowizard
谢谢,这个可行 - 只是在预览中没有显示高亮显示已恢复这些块。 - Stecman
3
对于最新的2020版本CLion,操作步骤如下:设置/编辑器/颜色方案/C/C++: 取消'有条件未编译代码'的 '前景' 勾选。 - robsn
@robsn 谢谢,可以用。然而,IDE 仍然无法让你浏览这段代码。特别是,您无法使用 ctrl + 左键单击内容。它不可点击。 - SergeiK

0

对于常见情况,该任务没有解决方案。 但是!您可以找到目标和相关的解决上下文,在其中定义了SOME_SYMBOL。

{{link1:...在状态栏中,您可以找到“解决上下文选择器”,以在IDE中使用所需的定义解决代码,包括Debug、Release、RelWithDebInfo和MinSizeRel上下文。}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接