什么是类型跟着

这似乎是一个简单的问题,但我无法通过Stack Overflow搜索或Google找到它。 类型后跟_t是什么意思? 如

int_t anInt;

我在C代码中看到很多与硬件密切相关的东西 - 我忍不住想它们是相关的。


正如Douglas Mayle指出的那样,它基本上表示一个类型名称。 因此,如果用' _t '结束变量名或函数名,你可能会产生混淆。 和size_t ,C89标准定义了wchar_toff_tptrdiff_t ,以及其他一些我已经忘记的标准。 C99标准定义了许多额外的类型,如uintptr_tintmax_tint8_tuint_least16_tuint_fast32_t等等。 这些新类型在<stdint.h>中正式定义,但大多数情况下,您会使用<inttypes.h> (对于标准C头文件而言异常)包含<stdint.h> 。 它( <inttypes.h> )也定义了用于printf()scanf()宏。

正如Matt Curtis指出的那样,后缀中的编译器没有意义。 这是一个以人为本的公约。

但是,您还应该注意到,POSIX定义了大量以' _t '结尾的额外类型名称,并保留了实现的后缀。 这意味着如果您正在使用POSIX相关系统,则使用该约定来定义您自己的类型名称是不明智的。 我工作的系统已经完成了(超过20年); 我们经常会被系统定义为与我们定义的名称相同的名称。


这是一个用于命名数据​​类型的约定,例如typedef


typedef struct {
  char* model;
  int year;
...
} car_t;


_t通常包含一个不透明的类型定义。

GCC只是将以_t结尾的名称添加到您可能不使用的保留名称空间中,以避免与未来版本的标准C和POSIX(GNU C库手册)冲突。 经过一番研究,我终于在POSIX标准(1003.1,理由(资料性附录))中找到了正确的参考:

B.2.12数据类型

本部分定义的其他类型以'_t'结尾的要求是由名称空间污染问题引起的。 很难在一个头文件中定义一个类型(其类型不是IEEE Std 1003.1-2001定义的类型),并且在另一个头文件中使用它,而不会将符号添加到程序的名称空间中。 为了允许实现者提供他们自己的类型,所有符合应用程序都需要避免以'_t'结尾的符号,这允许实现者提供其他类型。 由于类型的主要用途是在结构成员的定义中,可以(并且在许多情况下必须)将其添加到IEEE Std 1003.1-2001中定义的结构中,所以对额外类型的需求是令人信服的。

简而言之,标准说扩展标准类型列表的机会很大,因此标准限制了_t命名空间的使用。

例如,您的程序与POSIX 1003.1问题6匹配,并且您定义了一个类型foo_t 。 POSIX 1003.1第7期最终以新定义的类型foo_t 。 您的程序与新版本不匹配,这可能是一个问题。 限制_t用法可防止重构代码。 因此,如果您的目标是符合POSIX标准,那么您应该避免像标准所述的_t

附注:个人而言,我试图坚持POSIX,因为我认为它为清洁编程提供了很好的基础知识。 此外,我非常喜欢Linux编码风格(第5章)指南。 为什么不使用typedef有一些很好的理由。 希望这个帮助!

链接地址: http://www.djcxy.com/p/14017.html

上一篇: What does a type followed by

下一篇: what is the basic difference between stack and queue?