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 外部的“struct p”和 main 内部的“struct p”是不同的类型,因为它们是在不同的作用域中定义的。如果将两个声明都放在 main 之外或都放在 main 中,编译器将接受它。

当您在函数内部定义某些内容时,您是在说“这是我在此函数内部使用的定义;它不适用于函数之外的任何东西。”</p>

于 2012-06-28T16:28:55.177 回答