这有效:
struct LD__32
{
struct LD__32 *ld;
};
但这不是:
struct LD_32
{
struct LD_32 ld;
};
这是为什么? 正如pmg猜测的那样,我正在编译它作为c ++代码。编辑
答案 0 :(得分:5)
C中的结构不能包含不完整类型的成员。
在后一种情况下,您无法在LD_32 ld;
定义中定义LD_32
,因为此时尚未定义结构LD_32
。
在C
中查看constaints
结构
第6.7.2.1/2节
结构或联合不得包含不完整或函数类型的成员(因此, 结构不应包含自身的实例,但可以包含指向其自身实例的指针,但具有多个命名成员的结构的最后一个成员可能具有不完整的数组类型;这样的结构(以及可能递归地包含这种结构的成员的任何联合)不应该是结构的成员或数组的元素。
答案 1 :(得分:2)
因为它是一个递归和无限的定义。想一想。
答案 2 :(得分:2)
想想
sizeof(struct LD_32)
答案 3 :(得分:0)
struct LD_32
{
LD_32 ld;
};
在这种情况下,您希望编译器如何确定结构LD_32
的大小。
结构的大小是通过计算所有成员的大小加上一些填充来确定的。
所以即使没有填充,这个结构LD_32
的大小也会等于它的成员大小LD_32
本身,这意味着,
sizeof(LD_32) = size of member { size(LD_32) = size of member { size(LD_32) = size of member { size(LD_32) = ... ... } } } } } }
简而言之,无法计算尺寸,因为尺寸取决于未知的自身。
所以尺寸是不确定的。