0

このコードでエラーが発生するのはなぜですか?リンクせずにコンパイルするだけでもエラーが発生します。コンパイラが別のファイルに存在する可能性を考慮しないのはなぜですか?typedefステートメントがコンパイラによってどのように扱われるかを誰かが説明できますか?

前もって感謝します

 typedef struct p* q; 

    int main()
    {
     struct p{
      int x;
      char y;
      q ptr;
      }; 
      struct p p={1,2,&p};
      printf("%d\n",p.ptr->ptr->x);
      return 0;
    }

ps:不完全な型への間接参照は、gccで取得するエラーです。

4

1 に答える 1

2

mainの外側の「structp」とmainの内側の「structp」は、異なるスコープで定義されているため、異なるタイプです。両方の宣言をmainの外側に配置するか、両方をmainの内側に配置すると、コンパイラーはそれを受け入れます。

関数内で何かを定義すると、次のようになります。「この関数内で使用している定義は次のとおりです。関数以外には適用されません。」</p>

于 2012-06-28T16:28:55.177 に答える