2011-07-18 60 views
2
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是需要前向声明的结构。我的代码中似乎有编译错误。我想知道如何。有人知道吗?有谁知道为什么这个编译成功?

+0

这只是一个方面的评论,但我通常把'typedef's和这样的_before_'main()'(当我没有将它们包含在头文件中时,就是这样)。 – JAB

回答

4

本地结构有无关结构定义在main()之外。在main()你(forward-)声明一个结构体,定义一个指向该结构体的指针并永远不定义该结构体。这非常好。恰巧你在main()之外定义了一个具有相同名称的结构。

0

我想你误解了typedef是如何工作的 - 它不是宏观替代。

尤其是typedef后使用struct myStruct_s同为“struct struct myStruct_s” - 它只是struct myStruct_s,因为它读取在脸上。 typedef引入了一个可以使用的令牌而不是struct ...,但它不像宏一样扩展,并且不会“消除”仍然可以使用的struct ...声明。

+1

我明白。我的问题是struct myStruct_st * mS是如何工作的?请注意,myStruct_st是struct myStruct_s的typedef。我相信阿门已经回答了这个问题。 – Jingo

相关问题