typedef 的命名方案
Posted
技术标签:
【中文标题】typedef 的命名方案【英文标题】:Naming scheme for typedefs 【发布时间】:2010-11-14 05:42:55 【问题描述】:我正在开发一个广泛使用结构的库,例如
typedef struct foo_bar_s
...
foo_bar_t;
使用 _t 后缀是个坏主意,因为它是 POSIX 保留的命名空间。结构的 _s 后缀也没什么用。所以我想我可以把它全部改成
typedef struct foo_bar
...
foo_bar;
或者如果不需要结构名称
typedef struct
...
foo_bar;
但是,我无法再将 typedef 与常规符号(变量等)区分开来。这真的很重要吗?我应该为 typedef 使用不同的合适命名方案吗?还是没那么重要?
我真的不太确定。你怎么看?另外,您对 typedef 命名方案有什么建议?
【问题讨论】:
【参考方案1】:我使用 Dave Hanson 的 C Interfaces and Implementations 中使用的命名约定:类型以模块名称和大写 T 命名。例如,序列的类型是 Seq_T
,哈希表的类型是 @ 987654324@。在模块的实现中,Hanson 使用#define
缩写为T
。这基本上是适用于 C 编程的Modula-3 约定,但我发现经过短暂的初步冲击后它运行良好。
【讨论】:
【参考方案2】:虽然“_t”是保留的,但您遇到问题的可能性很小。然而,这个约定是旧版本 C 的残余,在旧版本中需要这种语法才能命名结构,所以现在你可以简单地编写如下内容(省略 typedef 和 typedef 名称):
结构名称_of_struct 类型 1 成员 1; 类型 2 成员 2; // ... N型成员N; ;是的,您可以在当前的 C 标准中使用单行 cmets ("//...")。
【讨论】:
_t 确实是 POSIX 保留的 现在是两个人说的。我仔细检查了,结果证明你是对的。我要解决这个问题。 _t 不是 POSIX 保留的,因为不允许其他任何人使用此类名称。相反,POSIX 实现只能使用这种形式的类型名称。 其实请看:gnu.org/s/libc/manual/html_node/Reserved-Names.html 根据文档:“以'_t'结尾的名称是为附加类型名称保留的。”当然,如果一个人总是在一个函数和类型名称前加上他们的库的名称(例如“mylibrary_suchandsuchtype_t”),他们不太可能与 C 标准库的未来版本发生冲突。以上是关于typedef 的命名方案的主要内容,如果未能解决你的问题,请参考以下文章