【发布时间】:2021-09-04 23:55:53
【问题描述】:
我有一个包含在 C 和 C++ 源文件中的 .h 文件。它的内容被包裹在
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
然而,当我将它包含在 .cpp 文件中时,clang-tidy 会发出 C++ 特定的消息,例如
- 警告:包含“stdbool.h”在 C++ 中无效;考虑删除它 [hicpp-deprecated-headers,modernize-deprecated-headers]
- 警告:包含已弃用的 C++ 头文件“stdlib.h”;考虑改用“cstdlib”[hicpp-deprecated-headers,modernize-deprecated-headers]
- 警告:使用 'using' 而不是 'typedef' [modernize-use-using]
我喜欢这些检查,我希望它们在我的 clang-tidy 配置中保持活跃,但当然仅适用于 C++ 代码。我无法将头文件更改为使用using 而不是typedef 或<cstdlib> 而不是<stdlib.h>,因为它也包含在C 源代码中,因此extern "C"。
有没有办法告诉 clang-tidy 将 extern "C" 中的代码视为 C 而不是 C++,即使包含在 .cpp 文件中?
clang-tidy 版本是 12.0.0。
【问题讨论】:
-
您可以尝试使用inline suppressions 来禁用这些警告。
-
@icebp 他可能会,但他犯的“生态”错误不应该被忽视。标准标头包含永远不应在
extern块内,并且不建议包含 C 版本的标头(正式为 UB)
标签: c++ c static-analysis clang-tidy