我有一个.h文件,该文件包含在C和C源文件中。其内容被包装在
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
然而,当我将它包含在. cpp文件中时,clang-tidy会发出特定于C的消息,比如
我喜欢这些检查,我想在我整洁的配置中保持它们处于活动状态,但当然仅适用于C代码。我无法使用而不是typedef
或将头文件更改为使用
有什么方法可以告诉clang-tidy将< code>extern "C"
中的代码视为C而不是C,即使包含在. cpp文件中?
叮叮当当的版本是 12.0.0。
这些C和C标头严格来说并不等同于C。这些警告是合法的,表明代码不符合C标准。
extern"C"
仅将声明的函数和变量的链接类型声明为全局,没有修改,名称以C格式使用。它不会影响使用C特性声明的对象和函数。它与语言的生态系统无关。更重要的是,如果C标头出现在这些括号内,如果声明的函数最初在C链接中,则可能会出现链接错误。
对于 C,您必须使用#ifdef __cplusplus
来包含 C 替代项,否则包括 C 替代项。
而不是:
#ifdef __cplusplus
extern "C" {
#endif
#include <stdbool.h>
#include <stdlib.h>
// your declarations
#ifdef __cplusplus
}
#endif
您将拥有一个具有以下结构的标题
// headers that are universally compatible (3rd party)
#ifdef __cplusplus
# include <cstdlib>
// other C++ headers
// Your C++ - only declarations (incompatible with C rules)
extern "C" {
#else
# include <stdbool.h>
# include <stdlib.h>
// other C headers
// C-only declarations (incompatible with C++ rules)
#endif
// your compatible declarations available for both
#ifdef __cplusplus
} // extern "C"
#endif
在某些情况下,由于标头包含或声明的依赖关系所需的顺序,需要调整此结构。盲目地更改您没有编写的库头中声明的链接,并且您不能保证这些使用哪种命名约定和链接类型是一种错误,可能导致ODR违规或链接失败。
typedef问题很烦人,作为一种临时措施,您可以使用NOLINT或命令行选项来抑制< code >现代化-使用-使用。一般来说,对于可移植的头文件,至少对于结构类型,这将由宏定义来完成。有一个问题,typedef和alias声明在某些情况下不能通过标准方法转换,例如,考虑函数指针类型的声明。
Clang-Tidy可以使用特殊的< code>NOLINT或< code>NOLINTNEXTLINE注释来取消对特定行的警告。它完全适用于您的使用情形:
使用它时,更高的风险是滥用它,并在可能改进编码的地方沉默警告。但是,当您需要从C和C源代码中都使用一个标题时,并且您已经仔细阅读了两次NOLINTed行,这是非常好的,至少是IMHO。此外,甚至可以指示警告保持沉默:
#ifdef __cplusplus
extern "C" {
#endif
// NOLINTNEXTLINE(hicpp-deprecated-headers,modernize-deprecated-headers) C compatible code
#include <stdbool.h>
#include <stdlib.h> // NOLINT C code requires that header
...
#ifdef __cplusplus
}
#endif
我最近开始尝试llvm的< code>clang-tidy工具。现在我正试图抑制来自第三方库代码的错误警告。为此,我想使用命令行选项
叮当 是自动检查 C/C++/Objective-C 代码的样式冲突、编程 错误和最佳实践的工具。 Electron's clang-tidy integration is provided as a linter script which can be run with npm run lint:clang-tidy. While clang-tidy checks your on-disk f
在Xcode中,在项目级别,我有以下设置:Xcode设置禁止不推荐使用的函数警告 这将-Wno-deprecated-declarations添加到编译中,我可以从报告导航器中验证这一点。同样,当我尝试使用一个不推荐使用的函数时,也不会出现警告。 我想在单个文件中禁止显示此警告,因此我使用#pragma,如下所示; 此代码给出以下编译错误;错误:未知警告组“-Wno deprecated decl
我目前正在尝试设置一个项目,该项目将使用Visual Studio 2019的新CMake功能(特别是将Clang和Ninja与CMake和VS2019结合使用),使用多个编译器(包括Clang、MSVC和GCC)。 我正在使用CMake将项目配置为“与编译器无关”,这样我就不需要编辑代码本身来通过预处理器指令或指令处理不同的编译器。 此项目需要配置为具有高警告级别(MSVC的,Clang的 -W
问题内容: 每次我都会收到警告: 抑制它的最佳方法是什么?所有软件包都是最新的。 Conf: OSX带有Brew Python 2.7.10(默认,2015年7月13日,12:05:58),pandas == 0.17.0和matplotlib == 1.5.0 问题答案: 您可以禁止所有警告:
我在我的项目中使用CMake,我想在项目中引入整洁的支票。 为此目的,我使用和文件进行检查设置。 我想使用警告作为错误,以便在CI中有可靠的方法来检查提交是否引入了一些新的违规行为。不幸的是,由于第三方库,我在启用检查时遇到了一些问题。 请看EDIT2! 例如,我使用,这是一个只有头的库。由于这一事实,我在代码中收到了一些警告,例如“a_file.cpp” 我有点不知道如何忽略这种问题,因为似乎无