所以,现在我的任务是检查整个代码中是否没有任何 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/