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 […]

“参数有不完整类型”警告

我在C文件中有这个: struct T { int foo; }; C文件包含一个带有这些行的h文件: typedef struct TT; void listInsertFirst(T data, int key, LinkedList* ListToInsertTo); 函数listInsertFirst是我收到警告的函数。 我该如何解决?

C:下标一个不完整类型的数组是合法的吗?

我找不到标准中的相关位,但是gcc和clang允许它,所以我想我想知道它是编译器扩展还是语言的一部分。 如果可以,请提供链接。 这可以通过以下方式产生: extern char arr[]; func(arr[7]); /*No error.*/ 晚编辑:我想我最好能清楚地理解这一点,虽然我已经离开了,但我从未做过这样的事情,所以我将奖励给第一个给我一个明确,简明的参考资料的人。关于为什么允许这样做的C89标准。 如果没有人能在C89中找到答案,C99是可以接受的,但您需要先查看C89标准。