【问题标题】:Does libstdc++ comply with MISRA C++?libstdc++ 是否符合 MISRA C++?
【发布时间】:2018-10-04 23:21:44
【问题描述】:

这是由我之前提出的一个问题引起的(关于同一主题):

Do BLAS and LAPACK libraries comply with MISRA standard?

现在我有一个更重要的问题:libstdc++(这是由 gcc 实现的标准库)是否符合 MISRA C++:2008?我认为答案是是的...只要您使用gcc-std=c++03 标志编译代码。

如果我使用 2011 年的标准(即-std=c++11)编译代码会发生什么?是否符合 MISRA C++:2008 标准?我必须证明 libstdc++ 符合 MISRA 吗?我可以为一些规则编写偏差(例如,我想使用 std::array 而不是 C 样式的数组),但是为整个 MISRA 标准编写它们看起来像是一项艰巨的任务。

我将不胜感激对此主题的任何见解。

【问题讨论】:

    标签: c++ standards libstdc++ standards-compliance misra


    【解决方案1】:

    不,它不符合 MISRA-C++ 标准。 glibc 也不是。但是标准也没有要求库必须用某种语言编写。标准库本身的标准合规性是一个相当混乱的话题,不管有没有 MISRA。

    我非常怀疑 MISRA-C++ 是否是这些库的优先事项。库(和 gcc)维护人员大多来自 Linux/桌面(“托管系统”)方面,不需要 MISRA 合规性。

    如果您需要符合 MISRA 的标准库,则必须查看各种商业嵌入式系统编译器。

    如果我使用 2011 年的标准编译代码会发生什么?是否符合 MISRA C++:2008 标准?

    不,它不合规。 MISRA-C++ 明确要求您使用 C++03,因此这里很难证明有偏差。

    我是否必须证明 libstdc++ 符合 MISRA?

    没有办法证明它,因为它不是。

    【讨论】:

    • 总的来说,如果您需要 C++11 及更高版本的安全子集,CERT C++ 可能是更好的选择,因为它更多地针对桌面/系统编程,而不是针对任务关键型嵌入式系统( C ++首先不适合的地方)。它们似乎已更新到 C++14。
    • 你就在这里。我正在笔记本电脑上构建我的项目,因此我使用的是“桌面”编译器(g++、clang++)。但是,由于最终目标是部署在嵌入式设备中,我绝对应该考虑嵌入式系统编译器。非常感谢!
    • @enanone 那么您可能应该向 IAR、Green Hills、Keil 等大型编译器供应商查询他们是否支持它。如果没有,我很确定一些汽车半导体公司有这样的编译器,但是你只能使用某些处理器系列。
    • 我还发现了这些guidelines from AUTOSAR,在这里看起来非常热门。它们同时处理 MISRA-C++ 和 C++14。我还没有阅读文档。
    • @Andrew Well...我不知道 C++ WG 在 2011 年开始吸烟的原因是什么,但除此之外,他们至少不害怕解决语言中明显的问题(逻辑运算符给出bool 不是 int,字符串文字是 const char[] 而不是 char[],i=i++ 也可以是明确定义的等等)。而 C WG 非常正统,将语言错误视为珍贵的老宠物。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多