Mik*_*ler 8 c naming-conventions
根据这个堆栈溢出答案,类型名称上的"_t"后缀在C中保留.当typedef
用于创建新的opaque类型时,我习惯在名称中使用某种类型的指示.通常我会选择类似的东西,hashmap_t
但现在我还需要别的东西.
C中的类型是否有任何标准命名方案?在其他语言中,使用类似CapsCase Hashmap
是常见的,但我看到的很多C代码根本不使用大写.CapsCase也可以很好地使用库前缀,比如XYHashmap
.
因此在C中命名类型是否有通用规则或标准?
是的,_t
如果您包含任何POSIX标题,POSIX保留名称结尾,因此建议您在理论上保持清楚.在过去的二十多年里,我参与了一个与这些名字相冲突两三次的项目.您可以使用公司前缀(例如,您的公司的TLA和下划线),或使用混合大小写的名称(以及_t
后缀)来最小化冲突风险; 所有我见过的碰撞已经短暂和全小写(dec_t
,loc_t
,...).
除了系统提供的(和系统保留的)_t
后缀之外,没有特定的广泛使用的约定.其中一个混合案例系统(camelCase或InitialCaps)效果很好.系统前缀也很有效 - 更好的库往往会小心这些.
如果您决定使用小写和_t
后缀,请确保使用足够长的名称并努力检查POSIX标准,您正在使用的主要平台,以及您认为可以处理的任何名称以避免不必要的冲突.当您example_t
向客户发布一些名称然后发现某些新平台存在冲突时,会出现最严重的问题.然后你必须考虑让客户改变他们的代码,而他们总是不愿意这样做.最好先预先解决问题.
该印山风格指南有一些建议:
毫无疑问,个别项目有自己的命名惯例.但是有一些一般规则.
带有前导和尾部下划线的名称是为系统目的保留的,不应用于任何用户创建的名称.大多数系统将它们用于用户不应该知道的名称.如果您必须拥有自己的私有标识符,请从一两个字母开始标识它们所属的包.
#define
常数应该在所有CAPS中.枚举常量是大写的或在所有CAPS中
函数,typedef和变量名称以及struct,union和enum标记名称应为小写.
许多宏"功能"都在所有CAPS中.某些宏(例如getchar和putchar)属于小写,因为它们也可能作为函数存在.只有当宏的行为类似于函数调用时,才能接受小写宏名称,也就是说,它们只对其参数进行一次评估,并且不为命名参数赋值.有时,即使参数只被评估一次,也不可能编写一个行为类似于函数的宏.
避免仅在大小写方面有所不同的名称,如foo和Foo.同样,避免使用foobar和foo_bar.混淆的可能性很大.
同样,避免看起来彼此相似的名称.在许多终端和打印机上,'l','1'和'I'看起来非常相似.名为'l'的变量特别糟糕,因为它看起来非常像常量'1'.
通常,全局名称(包括枚举)应具有标识其所属模块的公共前缀.或者,全局可以在全局结构中分组.Typedeffed名称通常在其名称后附加"_t".
避免使用可能与各种标准库名称冲突的名称.某些系统将包含比您想要的更多的库代码.此外,您的计划有一天可能会延长.