如果我在C或C ++中执行`typedef`,什么时候应该在typedeftypes的末尾添加`_t`?
我很困惑什么时候应该添加尾随的_t
到typedef
types?
例如,我应该这样做:
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是struct
, union
或enum
,则在声明variables时使用这些关键字,这会使代码更清晰。 当你想使抽象/封装目的的底层types不可见时,最好使用typedef
。 标准C的几个很好的例子是size_t
, int32_t
, mbstate_t
和stdio FILE
。
一些typedef
最糟糕的弊端是Windows API( WORD
, DWORD
, INT
, LPSTR
等)和glib( gint
, gchar
等)。 用相同的预期用法制作标准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原始,而不是像其他像野兽一样的野兽。