如何解决如何在C中处理typedef数据类型通常来说?
基本上,编译器会抱怨类型名称为'Song_t'未知,因为数据类型定义是在首次引用后发生的。
struct Cell { Song_t song;
struct Cell *pnext;
};
typedef struct Song Song_t;
如果我将typedef放在前面,它将起作用。 因此,通常建议在每个文件的开头放置typedef吗?
解决方法
在定义typedef名称之前,您不能引用它。
将typedef移到struct Cell
定义之前,或者在struct Song
定义中使用struct Cell
。
因此通常建议在每个文件的开头放置typedef吗?
不一定,通过编码可以避免typedef
-s
struct Cell {
struct Song song;
struct Cell *pnext;
};
当然,struct Song
应该在“之前”定义(考虑到C preprocessor)。
您也可以编码
typedef struct Song Song_t;
typedef struct Cell Cell_t;
并仅在以后使用Song_t
等。您必须提供(以后)struct Song
的定义(而不仅仅是前向声明)。
有关详细信息,请阅读Modern C,请访问this C reference网站和C11标准n1570。
在Linux kernel或简单的C编译器(例如nwcc或GTK toolkit)的源代码中寻找灵感。所有这些(大部分)都用C编码。另请参见github上的示例。还研究GCC的源代码。它是一种流行的C编译器(它的旧版本-例如GCC 4.4-大多是用C编码的。)
,C编译器通过一次从上到下的步骤解析预处理的代码。
这意味着在使用任何对象或类型之前,必须先对其进行定义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。