为什么 C struct tm 不是 typedef?

Why is C struct tm not as typedef?

我只是好奇,为什么在 C 时间结构中

struct tm

用作此而不与 typedef 一起使用。这样我总是需要写struct tm,才能得到正确的代码。很多结构都是"typedefed",为什么不是这个?

因为 C++ 与 C 不同,C++ 不是 C 的超集,它只是语言规范。

因为当语言有一个单独的结构标签命名空间时,用不必要的 typedef 污染通用命名空间是相当粗鲁的。如果你真的想要 typedef 隐藏它是 struct 的事实,你可以轻松地自己提供一个,而不必强迫我们其他人这样做。

A lot of structures are "typedefed", why not this one?

我不知道你为什么这么说; C 库中没有类型定义的结构。 FILE 是 typedef,但不一定是结构。

也许你的意思是在其他代码体中有很多。那是因为有些人,比如你自己,出于某种原因认为命名空间污染是个好主意。 C 库作者没有。

我认为问题是在 C 中这个结构是这样诞生的!

您可以自由创建声明 tm typedef 的包含文件,或在您的代码中声明它!

typedef struct tm tm;

或更好(我认为)

typedef struct tm tm_t;

您可以使用写在代码顶部的 #define 行来帮助您更快地编写代码。

#define TM struct tm

然后,将 struct tm 写成 TM.