小编cri*_*sls的帖子

如何在 MISRAC:2012 中创建遵循 Dir 4.12 和 4.8 的模块?

此问题涉及遵循 MISRAC:2012 指南的 ISO C99 编码。

\n\n

我正在寻找有关 Dir 4.8 \xe2\x80\x9c 的指导如果指向结构或联合的指针从未在翻译单元内取消引用,则该对象的实现应与 Dir 4.12 \ 一起隐藏\xe2\x80\x9d xe2\x80\x9c不应使用动态内存分配\xe2\x80\x9d。

\n\n

在 C 中实现抽象数据类型时,通常使用句柄来引用 ADT,该句柄是指向描述 ADT 内部状态的结构的指针。这可以根据 Dir 4.8 使用不透明指针来完成,其优点是内部细节对用户保持隐藏。

\n\n

通常,可能存在多个 ADT,因此必须有一种方法来创建多个句柄。这可以通过在初始化函数中为句柄引用的内部细节分配内存来解决,但是,这在 Dir 4.12 下是不允许的。

\n\n

另一种选择是初始化例程接收用户提供的指向静态分配句柄的指针,但是,这不能使用不透明指针来完成。

\n\n

我在下面说明这个问题。

\n\n
    Module.h \n\n    struct module; \n    typedef struct module module_t; /* Module handle is only available to  the world as an incomplete type. This allows us to satisfy MISRAC 2012 Dir 4.8.*/\n\n    Module.c\n\n    #include "module.h"\n    struct module\n    {\n        uint8_t value;\n    };\n    module_t* module_get_a_handle(void)\n …
Run Code Online (Sandbox Code Playgroud)

c misra opaque-pointers incomplete-type

5
推荐指数
1
解决办法
2405
查看次数

标签 统计

c ×1

incomplete-type ×1

misra ×1

opaque-pointers ×1