我有大量单独类型的数据(即:进程,文件,线程,函数等),这些数据是在简短的.c
/ .h
文件中定义的。一旦我完成了各个部分的实施并完成了单元/代码覆盖测试,我就开始将这些部分连接在一起。
当前实现在代码中使用指针到父对象 - struct
通过(void *)
指针,即:
struct typeB {
int B;
void *parent;
};
struct typeC {
int C;
void *parent;
};
struct typeA {
int a;
struct typeB *pB;
struct typeC *pC;
};
由于某些void *
的复杂程度,我使用了struct
个指针,如果我使用实际pointer-to-struct-type
代替{{1},他们就不会编译}}
void *
和typeB
需要相互交谈的一些功能,但它们很少见。此外,这两个typeC
都不需要了解struct
中的int a
。
我可以删除parent
指针,并将我的函数原型/定义重构为简单的所有接受parent struct
作为参数,访问子结构等,但它似乎有点过分,因为几个函数只需要访问(struct typeA *)
/ typeB
结构及其元素。
是否存在事实上的(非货物崇拜编程)标准来处理这种结构组织(类似于"不要施放typeC
"规则我经常在这个网站上看到这种情况)?
谢谢。
答案 0 :(得分:2)
由于某些结构的复杂程度,我使用了void *指针 如果我使用实际的指向结构类型代替它们,它们将无法编译 无效*。
前言声明有什么问题?
struct typeA; // forward declaration
struct typeB {
int B;
struct typeA *parent;
};
struct typeC {
int C;
struct typeA *parent;
};
struct typeA {
int a;
struct typeB *pB;
struct typeC *pC;
};
截至您的问题:如果您不想/需要将paren存储为结构的一部分,那么您将需要
a)将父地址作为参数传递,或者
b)定义静态变量,如struct typeA *current_parent;
,并在调用任何使用子项的方法之前放置父结构的地址。
上一个解决方案虽然不是线程安全的,但容易出错。