typedef的标准
gcc 4.4.4 c89
我只是想知道在创建类型时是否应该遵循任何标准。
例如:
typedef struct date { } date_t;
我也看到人们把这样的资本投入:
typedef struct date { } Date;
或者变量
typedef unsigned int Age;
或这个
typedef unsigned int age_t;
是否有任何应遵循的标准。 我个人更喜欢用_t进行后固定。
非常感谢任何建议,
其中大部分归结为个人偏好,关键是要保持一致(或者如果你有公司惯例,那就使用它)。 以下文章有一些命名指南:
http://www.montefiore.ulg.ac.be/~piater/Cours/Coding-Style/
请注意,它会切换’_t’部分:
typedef struct node_t { void *content; struct node_t *next; } Node; typedef enum season_t { SPRING, SUMMER, FALL, WINTER } Season;
这里有一个关于C命名约定的早期讨论:
C中最常见的命名约定是什么?
如果您正在使用遵循POSIX标准的平台,您应该知道以_t
结尾的任何标识符都保留给POSIX定义的类型,因此不建议对您自己的类型遵循相同的约定。
你可以简单地使用
typedef struct toto toto;
-
struct toto
(tag)和typedef
名称toto
(标识符)位于不同的C“namescopes”中,因此它们是兼容的,但它们最终指向相同的类型。 - 作为额外的奖励,这也与C ++兼容,C ++通常隐含地具有这样的
typedef
。 - 作为另一个奖励,这禁止声明一个变量
toto
,这有时会让人感到困惑。
风格是一种非常个人化且非常主观的东西,我强烈建议您只使用您喜欢的任何内容,或者您组织中使用的任何约定。
跟随其他人为您的项目所做的事情,以便一切都保持一致。 否则他们在技术上都是可以接受的。
我认为没有任何“标准”命名约定。 实际上,它们在项目之间(以及其他语言,如C ++或Java)之间的差异很大,我个人采用了所有语言的camelCase。
我总是通过typedef
定义我的结构,所以我只是使用我给它的任何名称(这也是Win32 API所做的)。 如果我需要一个自引用结构,我在_
前加上原始结构的名称:
typedef struct _Node { _Node *next; } Node;
通常,大多数语言允许将SentenceCase用于非标准化的类或类型。 我发现这是最佳实践,并且在允许它的语言中,还使用命名空间或模块来防止冲突。 在没有(例如C)的语言中,必要时的前缀永远不会误入歧途。 要使用多语言示例我正在处理的事情:
C: typedef uint32_t CpfsMode; C++: namespace Cpfs { typedef uint32_t Mode; } Python: cpfs.Mode = int