为什么我在这段代码中出错?即使我没有链接但只编译仍然会出错。为什么编译器不会考虑它出现在另一个文件中的可能性? 任何人都可以解释编译器如何处理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中得到的错误。
答案 0 :(得分:2)
main之外的“struct p”和main中的“struct p”是不同的类型,因为它们是在不同的范围内定义的。如果将两个声明放在main之外或两者都在main之内,编译器将接受它。
当你在函数中定义一些东西时,你会说“这是我在这个函数里面使用的定义;它不适用于函数以外的任何内容。“