gsl::suppress 整个包含语句
gsl::suppress whole include statements
我正在将指南支持库检查器集成到我的一个项目中。
Microsoft.CppCoreCheck
Microsoft.Gsl
当我 运行 它时,我从标准库、glm、boost 等包含的库中得到了一堆错误。
一个具体的例子是 SDL.h
,我在 sdl_stdinc.h
中收到警告。
我确保仅通过一个 header 在我的控制下包含 SDL:
ExtSDL.hpp
#pragma once
#pragma warning(disable: 4710)
#pragma warning(push, 0)
#include <SDL.h>
#pragma warning(pop)
我找不到有关如何从静态代码分析中排除此库的信息。
目前为止我发现的最实用的方法是 #defines
像
#define SDL_WARNINGS 4710 26135
然后#include
别人的脏代码就这样
#pragma warning(push)
#pragma warning(disable: SDL_WARNINGS)
#include <SDL.h>
#pragma warning(pop)
这将根据相关的警告代码(例如上面的 C26135)消除 gsl 检查器的警告。它会在您希望它保持安静的地方使编译器静音。请注意,警告禁用是 local 到 push/pop 范围。
这种方法允许编译 /Wall /WX,即使你打开额外的检查,包括 gsl。至关重要的是,即使您依赖于其他人的 headers 没有警告干净,它也能正常工作。遗憾的是,这包括我见过的每个 C 和 C++ 标准库实现以及 Boost、LLVM、Windows SDK 等等,即基本上所有的东西。此外,它还可以保护您免受邪恶 headers 的侵害,这些邪恶会改变警告编译指示(一些标准库实现曾经这样做并且可能仍然......)这种方法允许您将自己的代码提升到比你所依赖的糟粕
Microsoft C++ Core Check 的优点之一是他们将其绑定到用于警告的常用机制的方式,因此这种方法统一适用于额外规则集中的常规警告和检查程序。谢天谢地,他们做了这样的事情:一些 gsl 检查器相当可疑并且与许多现存的编码风格不兼容,即为代码打开 gsl #includes 大标准供应商库,你很快需要构建一长串警告代码来禁用在你可以降低噪音之前,你可以专注于你自己的代码。当然,您可以全局 #pragma warning(disable: GSL_CHECKERS_YOU_DONT_LIKE)
为您自己的代码,这样您就可以专注于您认为有用的方面。
或者,您可以通过选择要使用的规则集来选择要应用的规则 and/or 创建一个自定义规则集。这大概会最大限度地减少您的构建时间,而启用代码分析的构建时间并不那么快。
最好能更直接地回答您的问题,因为您可以禁用 "other people's stuff" 的跳棋,这实际上使脏 headers 构建迅速。这是一个明显的功能请求,但我不知道它是否受到支持。据推测,实施例如将是非常微不足道的。只有 运行 在指定的一组目录中找到源代码的检查器,因此如果 #include 超出该区域,检查器将自动禁用。 Microsoft 的任何人都在读这篇文章吗?
有多种方法可以抑制 CppCoreCheck 警告:
- 您可以使用以下方式抑制 CppCoreChecks
[[gsl::suppress(chapter)]] 属性,其中 chapter 来自 C++
核心指南,例如,con.4. Please also look at MS docs 供参考。
- 您可以使用 #pragma warning 单独或批量抑制警告,如上文所述。
- 您可以使用 CAExcludePath.
抑制 "not your code" 的所有警告
我正在将指南支持库检查器集成到我的一个项目中。
Microsoft.CppCoreCheck
Microsoft.Gsl
当我 运行 它时,我从标准库、glm、boost 等包含的库中得到了一堆错误。
一个具体的例子是 SDL.h
,我在 sdl_stdinc.h
中收到警告。
我确保仅通过一个 header 在我的控制下包含 SDL:
ExtSDL.hpp
#pragma once
#pragma warning(disable: 4710)
#pragma warning(push, 0)
#include <SDL.h>
#pragma warning(pop)
我找不到有关如何从静态代码分析中排除此库的信息。
目前为止我发现的最实用的方法是 #defines
像
#define SDL_WARNINGS 4710 26135
然后#include
别人的脏代码就这样
#pragma warning(push)
#pragma warning(disable: SDL_WARNINGS)
#include <SDL.h>
#pragma warning(pop)
这将根据相关的警告代码(例如上面的 C26135)消除 gsl 检查器的警告。它会在您希望它保持安静的地方使编译器静音。请注意,警告禁用是 local 到 push/pop 范围。
这种方法允许编译 /Wall /WX,即使你打开额外的检查,包括 gsl。至关重要的是,即使您依赖于其他人的 headers 没有警告干净,它也能正常工作。遗憾的是,这包括我见过的每个 C 和 C++ 标准库实现以及 Boost、LLVM、Windows SDK 等等,即基本上所有的东西。此外,它还可以保护您免受邪恶 headers 的侵害,这些邪恶会改变警告编译指示(一些标准库实现曾经这样做并且可能仍然......)这种方法允许您将自己的代码提升到比你所依赖的糟粕
Microsoft C++ Core Check 的优点之一是他们将其绑定到用于警告的常用机制的方式,因此这种方法统一适用于额外规则集中的常规警告和检查程序。谢天谢地,他们做了这样的事情:一些 gsl 检查器相当可疑并且与许多现存的编码风格不兼容,即为代码打开 gsl #includes 大标准供应商库,你很快需要构建一长串警告代码来禁用在你可以降低噪音之前,你可以专注于你自己的代码。当然,您可以全局 #pragma warning(disable: GSL_CHECKERS_YOU_DONT_LIKE)
为您自己的代码,这样您就可以专注于您认为有用的方面。
或者,您可以通过选择要使用的规则集来选择要应用的规则 and/or 创建一个自定义规则集。这大概会最大限度地减少您的构建时间,而启用代码分析的构建时间并不那么快。
最好能更直接地回答您的问题,因为您可以禁用 "other people's stuff" 的跳棋,这实际上使脏 headers 构建迅速。这是一个明显的功能请求,但我不知道它是否受到支持。据推测,实施例如将是非常微不足道的。只有 运行 在指定的一组目录中找到源代码的检查器,因此如果 #include 超出该区域,检查器将自动禁用。 Microsoft 的任何人都在读这篇文章吗?
有多种方法可以抑制 CppCoreCheck 警告:
- 您可以使用以下方式抑制 CppCoreChecks [[gsl::suppress(chapter)]] 属性,其中 chapter 来自 C++ 核心指南,例如,con.4. Please also look at MS docs 供参考。
- 您可以使用 #pragma warning 单独或批量抑制警告,如上文所述。
- 您可以使用 CAExcludePath. 抑制 "not your code" 的所有警告