首先解释一下啥是结构体的不完整声明:
如下面这个例子:
struct
B;
//对结构体B进行不完整声明
程序中突然出现这么一句是干什么用呢?请看下面的程序:
struct
B;
//对结构体B进行不完整声明
//结构体A中包含指向结构体B的指针
struct
A
{
struct
B *partner;
//other members;
};
//结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明
struct
B
{
struct
A *partner;
//other members;
};
这下明白了吧?
有时候,你必须声明一些相互之间存在依赖的结构。即:其中一个结构包含了另一个结构的一个成员或多个成员。和自引用一样,至少有一个结构必须在另一个结构体内部以指针的形式存在。问题在于声明部分:如果每个结构都引用了其他结构的标签,哪个结构应该首先被声明呢?
1>该问题采用不完整声明来解决。它声明一个作为结构标签的标识符。然后,把这个标签用在不需要知道这个结构的长度的声明中,如声明指向这个结构的指针。接下来的声明把这个标签与成员列表联系在一起。
Linux的代码中,在linux/sched.h中就有这么一个声明:
struct task_struct;
作用即是上面所述。
至于不完整声明,应该是源于英文的incomplete declaration 或者是 forward declaration。
时间: 2024-10-21 14:20:26