C++ 如何使用模板库控制静态分析的编译器错误消息?
今天我了解到大多数编译器提供静态分析,比如C++ 如何使用模板库控制静态分析的编译器错误消息?,c++,clang,C++,Clang,今天我了解到大多数编译器提供静态分析,比如 SET (CMAKE_CXX_FLAGS "-std=c++1y -Werror -Weverything -Wno-documentation -Wno-c++98-compat -Wno-padded") 我认为这很酷,但我也使用了一些模板库,当然它们只是标题 现在我不能再使用这些标志了,因为这些库中充满了“错误/警告”。我可以尝试查找所有这些标志并禁用它们,但我真的希望在代码中包含这些错误/警告 有解决办法吗?我想也许我可以尝试找到所有的模板实
SET (CMAKE_CXX_FLAGS "-std=c++1y -Werror -Weverything -Wno-documentation -Wno-c++98-compat -Wno-padded")
我认为这很酷,但我也使用了一些模板库,当然它们只是标题
现在我不能再使用这些标志了,因为这些库中充满了“错误/警告”。我可以尝试查找所有这些标志并禁用它们,但我真的希望在代码中包含这些错误/警告
有解决办法吗?我想也许我可以尝试找到所有的模板实例化,在没有编译器警告的情况下编译头文件,然后将预编译头与我的代码链接起来
您认为这可能吗?gcc和clang支持都允许您忽略某段代码的特定诊断消息。例如,要禁用
-Wunused变量
,如下所示:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
// include headers with warnings
#pragma GCC diagnostic pop
这对于无法控制代码的第三方库非常有用。主题外,但是
-Weverything
不是您可能期望的标志,尤其是与-Werror
一起使用<代码>gcc不提供标志,因此不可移植。假设-Wall-Wextra-Wshadow-Wbad函数cast-Wcast align
应该可以满足大多数情况。@HongxuChen噢,天哪,我之前错过了-Weverything
,请注意,事实并非如此。