请原谅我的冗长.
这就是我喜欢用来声明模块中的用户函数的头的方式.
struct Object;
void function( struct Object * , ... );
这只是为了模块的用户不会有一个杂乱无章的头文件,所有的东西都在 struct 中使用.
c文件具有struct定义.让我们在这个主 struct 中有 struct .
struct Object {
int item;
struct Component component;
};
让我们在用户定义的 struct 中使用这个模块对象.请说:
#include "module.h" /*declarations*/
...
struct UserItem {
int something;
...
struct Object object;
} userThing;
这就是我在C预处理方面的问题.
这造成了一个问题.在编译过程中, struct 对象的大小尚未定义,因此无法定义 struct UserItem的大小,编译失败,返回error: field 'object' has incomplete type
现在有什么补救办法呢?显然,可以使用 struct 指针,但这增加了使用动态内存分配进行 struct 初始化的烦人步骤.对 struct 定义使用单独的标头怎么样?好的,但这意味着 struct 符号名称现在被这些名称弄乱了,就像 struct 组件一样.此外,用户还必须包括此头文件以及主模块头文件.在我看来,这不是一个好的解决方案.也许甚至会做一些类似struct Object { uint8_t component_mem[SIZE]; };
我唯一的 idea 是在编译中有一个步骤,其中 struct 定义是全局预处理的,这样就可以找到所有大小.我相信这一定已经在链接阶段完成了,因为取消了对 struct 指针的引用?
让我知道我是否犯了一个错误,或者已经有一个很好的解决方案.
相似堆栈溢出页面(S):1