微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在C中处理typedef数据类型通常来说?

如何解决如何在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编译器(例如nwccGTK toolkit)的源代码中寻找灵感。所有这些(大部分)都用C编码。另请参见github上的示例。还研究GCC的源代码。它是一种流行的C编译器(它的旧版本-例如GCC 4.4-大多是用C编码的。)

,

C编译器通过一次从上到下的步骤解析预处理的代码。

这意味着在使用任何对象或类型之前,必须先对其进行定义。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。