Tag: 不透明指针

如何在DIS 4.12和4.8之后的MISRAC:2012中创建模块?

该问题涉及遵循MISRAC:2012指南的ISO C99编码。 我正在寻找关于Dir 4.8的指导“如果在翻译单元中从不取消引用结构或联合的指针,那么应该隐藏对象的实现”与Dir 4.12一起“不应使用动态内存分配”。 在C中实现抽象数据类型时,通常使用句柄来引用ADT,该句柄是指向描述ADT内部状态的结构的指针。 这可以使用根据Dir 4.8的不透明指针来完成,其好处是内部细节对用户隐藏。 通常可以存在多个这些ADT,因此必须有一种方法来创建多个句柄。 这可以通过在初始化函数中为句柄引用的内部细节分配内存来解决,但是,在Dir 4.12下不允许这样做。 另一个选择是初始化例程接收指向用户提供的静态分配句柄的指针,但是,这不能使用不透明指针来完成。 我在下面说明了这个问题。 Module.h struct module; 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.*/ Module.c #include “module.h” struct module { uint8_t value; }; module_t* module_get_a_handle(void) { return […]

我是否正确假设无法正向声明库的不透明指针类型?

关于前向声明和不透明类型有很多问题,但大多数似乎是从图书馆作者的角度出发,或者是人们试图使用不带指针的不完整类型或者其他类似的。 我正在使用一个接口/接受FOO *指针的库。 我想确认我不能(或不应该)以某种方式在我的头文件中定义FOO或FOO * (它定义了一个带有FOO *成员的结构)。 我知道我可以在我的头文件和.c文件中只#include ,但由于这只是一个学习项目,我想澄清一下。 (一方面,似乎前向声明似乎是可能的,因为我的结构成员只是一个指针,因此它的大小在不知道FOO是什么的情况下是已知的 – 但另一方面,我不知道它是否是当库已经在那里时,有效/智能地向FOO typedef一些东西。) 提前致谢!