有谁知道为什么这个编译成功?

时间:2011-07-18 17:47:51

标签: c forward-declaration

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;

我知道myStruct_s是需要向前声明的结构。我的代码中有这个拼写似乎编译。我不知道怎么样。有谁知道吗?

2 个答案:

答案 0 :(得分:4)

本地结构使用main()之外定义的结构无事可做。在main()中,您(转发)声明一个结构,定义一个指向该结构的指针,从不定义该结构。那完全没问题。碰巧在$ {1}}之外定义一个名称相同的结构。

答案 1 :(得分:0)

我认为你误解了typedef是如何运作的 - 它不是宏观替代。

特别是,在struct myStruct_s 之后使用typedef与“struct struct myStruct_s”相同 - 它只是struct myStruct_s,因为它读到脸上。 typedef引入了一个可以使用而不是struct ...的令牌,但它不会像宏那样扩展,也不会“消灭”struct ...声明,它仍然可以使用。 / p>