c++ - 检查是否使用了 c++11 特性

标签 c++ c++11 static-analysis

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

我现在能想到的可以分为两类:

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

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

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

我在多种平台上构建它,因此我可以在 Windows 或 Linux 上进行检查。

最佳答案

重新发布我的评论。

现代编译器默认使用 -std=c++11。旧的需要通过 -std=c++11 明确地说我们想要 c++11。您可以明确选择您想要的任何标准。所以使用 -std=c++03 会在所有 C++11 构造上给你错误。

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

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

关于c++ - 检查是否使用了 c++11 特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29816857/

相关文章:

php - Unix 套接字发送接收客户端到服务器大块数据错误

c++ - 我应该在 C++ 中使用 std::function 还是函数指针?

c++ - 部分模板-基于模板的特化与显式部分模板特化

c - 如何自动合并C源文件?

java - OpenJML 中的编程静态检查

.net - 有关如何编写静态分析规则 (FXCop) 以确保删除事件委托(delegate)的任何想法

c# - 如何防止windows mobile图片框闪烁

c++ - 这个可变参数模板代码有什么作用?

c++ - 在 `for` 循环内递增后,迭代器结束检查失败

c++ - 通过引用传递值但仍然显示地址而不是值