如果我在C或C ++中执行`typedef`,什么时候应该在typedeftypes的末尾添加`_t`?

我很困惑什么时候应该添加尾随的_ttypedeftypes?

例如,我应该这样做:

 typedef struct image image_t; 

或这个:

 typedef struct image image; 

一般规则是什么?

另一个例子,我应该这样做:

 typdef enum { ARRAY_CLOSED, ARRAY_OPEN, ARRAY_HALFOPEN } array_type_t; 

或这个:

 typdef enum { ARRAY_CLOSED, ARRAY_OPEN, ARRAY_HALFOPEN } array_type; 

请赐教。

谢谢,Boda Cydo。

在POSIX中,以_t结尾的名字是保留的,所以如果你的目标是一个POSIX系统(例如Linux),你不应该用_t结束你的types。

我个人鄙视_t公约。 只要你是一致的,然而这并不重要。

请注意,如果您正在编写其他标准(如POSIX),则需要在使用此类名称前检查标准是否正常。

何时应该使用_t ? 决不? 它是由一个主要的标准(POSIX)保留的,即使现在不是,你的代码也许有一天会在POSIX环境中使用,所以使用_t是一个坏主意。

我会进一步说,过度使用typedef一般是不好的。 如果您的types是structunionenum ,则在声明variables时使用这些关键字,这会使代码更清晰。 当你想使抽象/封装目的的底层types不可见时,最好使用typedef 。 标准C的几个很好的例子是size_tint32_tmbstate_t和stdio FILE

一些typedef最糟糕的弊端是Windows API( WORDDWORDINTLPSTR等)和glib( gintgchar等)。 用相同的预期用法制作标准Ctypes的副本只会造成混淆,并通过污染所有使用这些非标准types名称的代码来将开发人员locking到您的库/平台中。

我使用后缀来提高可读性:_t用于typedef,_e用于25/30年以来的枚举…有时我会在typedef定义结构时使用_st。

我认为这是很好的做法,让代码可读和标准化,然后我find正确的使用后缀! 此外,迄今为止,我还没有find任何POSIX官方文档,指出后缀_t是保留的。

旧的stdio.h包含_t …参见:grep -i“_t;” stdio.h :)我认为POSIX标准比C更年轻一些!

为你的typesselect好的名字,就像你应该使用你的variables,函数和其他东西一样。 一个好名字没有embedded冗余信息,这使得阅读代码变得更加困难 – 如果你有一个好的名字,那么_t永远不会帮助你。

顺便说一下: typedef image image; 没有任何意义,因为它只是使图像成为自己的types定义。

我使用_t后缀枚举和基元types来区分它们与variables。 我把它们放到命名空间中,所以我不关心_t保留。

certificate这一点。 variables名通常是典型的typedefedtypes。 像std::size_t size;array_t array等。我发现,当types包含_t后缀时,更容易为variablesarray_t array不错的名称。 它也提醒我,这是一个typedefed原始,而不是像其他像野兽一样的野兽。