【问题标题】:Naming scheme for typedefstypedef 的命名方案
【发布时间】: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 命名方案有什么建议?

【问题讨论】:

    标签: c posix naming 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 标准库的未来版本发生冲突。
      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多