2011-07-18 11 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'やそのような_before_' main() 'を(ヘッダーファイルに入れていない場合は)置きます。 – JAB

答えて

4

ローカル構造体にははありません構造体はmain()の外に定義されています。 main()では、構造体を宣言し、その構造体へのポインタを定義し、構造体を決して定義しません。それは完全にOKです。そのため、同じ名前の構造体をmain()の外に定義することがあります。

0

typedefの仕組みが間違っていると思います。マクロ置換ではありません。 typedefstruct myStruct_sを使用して特に

は、「struct struct myStruct_s」と同じないである - それは顔に読み込むよう、それは、単にstruct myStruct_sです。 typedefにはstruct ...ではなく、使用できるトークンが導入されていますが、マクロのようには展開されず、そのまま使用することができるstruct ...宣言を「ワイプアウト」しません。

+1

私はそれを理解しています。私の質問は、構造体myStruct_st * mSはどのように機能しますか? myStruct_stは、struct myStruct_sのtypedefです。私はArmenがそれに答えたと信じています。 – Jingo

関連する問題