【问题标题】:Struct Name Standards in CC中的结构名称标准
【发布时间】:2014-05-18 20:40:00
【问题描述】:

C语言中数据结构的命名标准是什么?

例如,下面的代码 sn-p 是从http://www.sparknotes.com/cs/searching/hashtables/section3.rhtml 中挑选出来的:

typedef struct _hash_table_t_ {
    int size;       /* the size of the table */
    list_t **table; /* the table elements */
} hash_table_t;

为什么在命名结构时使用_*_,而不是typedef? _t 代表什么?等等……

指向正确指南的链接将是完美的。

我一直在搜索谷歌并查看编码风格指南,但是我找不到与此相关的任何内容。

【问题讨论】:

  • _t 通常似乎代表“类型”
  • 没有这样的标准命名约定。但是,您可能需要参考 stroustrup.com/JSF-AV-rules.pdf 了解 C++ 编码标准。
  • _a 代表地址对吗?
  • 此链接包含有关 c++ 编码标准的良好信息:isocpp.org/wiki/faq/coding-standards
  • 注意,如果写Posix代码(fe for Linux),那么_t后缀是保留的,不应该在应用程序代码中使用(在实践中仍然常用...)。

标签: c coding-style


【解决方案1】:
  • 使用下划线 ('_') 分隔名称组成部分。
  • _t通常用于typedef,用结尾的“_t”区分typedef名称,例如-Thing_list_t;

您可以参考EECS 381 的C 编码标准了解更多详情。

【讨论】:

  • 这很难看(混合大小写和下划线)。不要忘记size_t
【解决方案2】:

C 中没有唯一/确定/终极/最终编码标准。每个项目/公司都有自己的编码标准。例如linux kernel 有自己的编码标准指南。阅读本标准中的Chapter 5: Typedefs,该标准讨论了何时应该/不应该在structs 中使用typedefs

【讨论】:

    【解决方案3】:

    您应该永远不要复制 C 实现或第三方库的命名约定。他们使用自己的命名约定来不干扰(发生名称冲突)您的代码。

    在 ISO C99 7.1.3 中明确禁止使用以下划线开头的标签名称:

    ——所有以下划线开头的标识符总是被保留 在普通和标签中用作具有文件范围的标识符 命名空间。

    就我个人而言,我认为将 typedefs 用于结构是完全愚蠢的,因为它所做的只是让您不必在几个地方编写 struct 关键字——这些信息不应该隐藏在 typedef 后面。当我看到以 *_s 结尾的结构的 typedef 名称只是为了表明 typename 是结构的别名时,我总是感到畏缩。

    【讨论】:

    • 我不知道 _ 被禁止。我仍然会像不编码一样编码。
    • 当我看到struct foo_struct(Linux 内核)之类的东西时,我会感到畏缩。这不仅仅是因为懒惰键入 struct 关键字,还在于能够轻松地导航 ctagged 代码库,并且可能具有更好的可读性 (IMO)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2010-12-21
    • 2013-07-17
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    相关资源
    最近更新 更多