C中的typedef行为

时间:2012-06-28 16:23:11

标签: c

为什么我在这段代码中出错?即使我没有链接但只编译仍然会出错。为什么编译器不会考虑它出现在另一个文件中的可能性? 任何人都可以解释编译器如何处理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中得到的错误。

1 个答案:

答案 0 :(得分:2)

main之外的“struct p”和main中的“struct p”是不同的类型,因为它们是在不同的范围内定义的。如果将两个声明放在main之外或两者都在main之内,编译器将接受它。

当你在函数中定义一些东西时,你会说“这是我在这个函数里面使用的定义;它不适用于函数以外的任何内容。“