【发布时间】:2017-01-19 20:52:24
【问题描述】:
为什么以下是合法的:
typedef struct a aType;
struct a
{
int x;
aType *b;
};
以及以下违法行为:
void main()
{
typedef struct a aType;
aType someVariable;
struct a
{
int x;
aType *b;
};
}
我只是好奇,因为在每种情况下它都是前向引用,据我所知,至少对于函数和变量,前向引用是不合法的。
另外,C++ 的答案是否也一样?
【问题讨论】:
-
在情况 2 中,编译器还不知道
aType的大小 — 在您尝试定义someVariable后出现。但是,您可以合法地使用aType *somePointer;— 指针大小是已知的,即使它指向的大小不知道。 -
请使用更对应的标题。这与你所问的完全无关。如果您对不同的语言感兴趣,请提出单独的问题。
-
@JonathanLeffler 函数 main 在托管环境中可以有任何类型。
-
@EugeneSh.: 是的,但是指向所有
struct类型的指针将具有相同的大小和表示形式 (6.2.5/28)。
标签: c typedef forward-declaration