【问题标题】:Defining preprocessor symbols for CLion analyzer为 CLion 分析器定义预处理器符号
【发布时间】:2023-04-04 20:34:01
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 您可能需要为文件找到合适的包含上下文。如果您有可见的状态栏,您可以在右下角看到“上下文:”下拉列表。试试看吧。

标签: preprocessor analysis clion


【解决方案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)。

耶!

【讨论】:

    【解决方案2】:

    要获得语法高亮: 转到设置 ⇒ 编辑器 ⇒ 颜色和字体 ⇒ C/C++ 并删除“有条件的非编译代码”的所有勾选。这样所有代码都会以通常的高亮显示。

    【讨论】:

    • 谢谢,但我找不到任何标题类似于“条件非编译代码”的复选框。
    • 谢谢,这行得通 - 它只是没有显示在预览中,这些块恢复了突出显示。
    • 对于最新的 2020 CL​​ion,它是:Settings / Editor / Color_Scheme / C/C++: Remove 'Foreground' tick of 'Conditionally non-compiled code'
    • @robsn 谢谢,这行得通。但是,IDE 仍然不允许您浏览此代码。值得注意的是,您不能 ctrl + 左键单击内容。不可点击
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多