检查是否使用了 C++11 功能

check if c++11 features are used or not

本文关键字:C++11 功能 是否 检查      更新时间:2023-10-16

所以,现在我的任务是检查整个代码中是否没有任何 c++11 依赖项和功能。问题是 - 是否可以检查是否有?

我现在能想象的可以分为两组:

  • -std=c++11 -Wc++98-compat + 解析输出;

  • Boost.Config + 围绕所有代码的大量宏,这似乎比第一个更复杂;

可能某些静态分析器中可能有内置功能?

我正在多个平台上构建它,所以我可以在Windows或Linux上进行检查。

重新发布我的评论。

现代编译器默认-std=c++11。旧的需要明确说我们想要 c++11 通过 -std=c++11 .您可以显式选择所需的任何标准。因此,使用-std=c++03会让您在所有 C++11 构造上出错。

但这还不是故事的全部。某些代码在 C++03 和 C++11 中可以以不同的方式运行,但仍然可以编译!例如,静态初始化仅在 C++11 中是线程安全的,因此在 C++03 中,您将获得将编译但被错误的代码。确保您需要与完全了解 C++03、C++11 及其差异的人一起审查整个代码。

也许您可以使用静态代码分析工具支持这项工作,但要 100% 确定您需要审查它......