【发布时间】:2022-01-25 11:48:06
【问题描述】:
如果这个问题看起来太“幼稚”,我提前道歉,但问题是:
这是一个简单的代码:
#include <iostream>
struct my_struct
{
struct fictitious_name fn_struct;
};
int main()
{
}
因为没有定义fictitious_name结构,所以没有编译。
但是如果我这样重写它:
#include <iostream>
struct my_struct
{
struct fictitious_name* fn_struct;
};
int main()
{
}
然后一切正常,代码已编译,但 fictitious_name 结构仍未定义。 为什么指向不存在的结构的指针会起作用?
【问题讨论】:
-
C 标准在结构命名空间中定义一个 incomplete 结构,编译器一看到关键字
struct。所以定义了不完整的结构,但是你不能使用它,因为它是不完整的。另一方面,指向结构的指针总是被定义。 -
请不要标记垃圾邮件。 C 和 C++ 是两种不同的语言。
标签: c++ pointers sizeof incomplete-type