【发布时间】:2020-10-07 21:29:47
【问题描述】:
基本上,编译器会抱怨未知类型名称“Song_t”,因为数据类型定义是在首次引用之后发生的。
struct Cell { Song_t song;
struct Cell *pnext;
};
typedef struct Song Song_t;
如果我把 typedef 放在前面,它可以工作。 因此,通常建议将 typedef 放在每个文件的开头吗?
【问题讨论】:
-
编译器怎么知道结构定义中的Somg_t是什么?!
-
阅读Modern C 并查看this C reference
-
在您的下一个问题中提供一些minimal reproducible example。另请阅读您的 C 编译器的文档(例如 GCC,并在 github.com 等上研究 现有 C 软件的源代码以获取灵感...
-
@BasileStarynkevitch:这不是一个调试问题,不需要最小的可重现示例。问题已经充分提出。
-
@VladfromMoscow:编译器可以检查整个源文件,如果可能,根据文件的完整信息解析类型。这不是因为 C 在很大程度上被设计为一次性编译。但这是学生可能还不知道的关键信息,所以你提出的反问是一个不充分的答案。