C 有人知道为什么编译成功吗?

C 有人知道为什么编译成功吗?,c,forward-declaration,C,Forward Declaration,我知道myStruct_是需要向前声明的结构。我的代码中有这样一个打字错误,似乎是在编译。我想知道是怎么回事。有人知道吗?本地结构与在main()之外定义的结构无关。在main()中(向前-)声明一个结构,定义一个指向该结构的指针,并且永远不要定义该结构。那很好。碰巧您在main()之外定义了一个同名的结构 我认为您误解了typedef的工作原理——它不是宏替换 特别是,在typedef之后使用struct myStruct\u s与“struct-struct myStruct\u”不同——它

我知道myStruct_是需要向前声明的结构。我的代码中有这样一个打字错误,似乎是在编译。我想知道是怎么回事。有人知道吗?

本地结构与在
main()
之外定义的结构无关。在
main()
中(向前-)声明一个结构,定义一个指向该结构的指针,并且永远不要定义该结构。那很好。碰巧您在
main()
之外定义了一个同名的结构

我认为您误解了
typedef
的工作原理——它不是宏替换


特别是,在
typedef
之后使用
struct myStruct\u s
与“
struct-struct myStruct\u
”不同——它只是
struct myStruct\u
,就像它在脸上读到的那样。typedef引入了一个可以使用的标记,而不是
struct…
,但它不像宏那样扩展,也不会“擦除”仍然可以使用的
struct…
声明。

我理解这一点。我的问题是struct myStruct\u st*mS是如何工作的?请注意,myStruct_st是struct myStruct_s的类型定义。我相信Armen已经回答了这个问题。这只是一个旁白,但我通常会将
typedef
s等放在
main()
之前(当我没有将它们包含在头文件中时)。
int main()
{
   // forward declaration
   struct myStruct_st *mS; // Note that this will expand as "struct struct myStruct_st *mS which does not make any sense to me"

   return 0;
}

// definition of myStruct_s
typedef struct myStruct_s
{
   int x;
   int y;
} myStruct_st;