此问题涉及遵循 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)