【发布时间】:2019-02-28 07:35:26
【问题描述】:
我在 Linux 上使用 GCC 进行编译,但 CMake 足以生成与 Clang 兼容的编译数据库。这意味着我可以在我的代码库上运行基于 Clang 的花哨的现代工具,并且这些工具完全了解每个文件的构建方式(标志、定义、包含路径等)。到目前为止一切都很好。
但是今天我的 IDE 中基于 Clang 的静态分析开始显示 Clang 特定警告。我不认为这对我的问题特别重要,它是哪个警告,但它是warning: disabled expansion of recursive macro,由-Wdisabled-macro-expansion 生成。此特定宏由第三方提供,因此无法修复警告,但我想禁止它,因为它在相关文件中多次出现。
我正在努力解决的是如何在基于 Clang 的分析工具中抑制警告,而不会在 GCC 构建中引起新的警告。
- 添加
#pragma clang diagnostic ignored "-Wdisabled-macro-expansion"会抑制 Clang 工具的警告,但会导致 GCC 发出warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas]。 - 同样,添加
#pragma GCC diagnostic ignored "-Wdisabled-macro-expansion"会抑制 Clang 警告(因为 Clang 尝试与 GCC 诊断兼容),但会导致 GCC 发出warning: unknown option after ‘#pragma GCC diagnostic’ kind [-Wpragmas]。 - 用
#ifdef __clang__包装上述任何一个都可以使GCC 满意,但不会抑制Clang 警告,因为该工具足够聪明,可以知道代码不是用__clang__编译的,而是用__GNUC__编译的.
有没有办法让诊断#pragma 对 Clang 工具可见,但对 GCC 不可见?
【问题讨论】:
标签: c++ gcc clang compiler-warnings suppress-warnings