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; 
  1. struct toto (tag)和typedef名称toto (标识符)位于不同的C“namescopes”中,因此它们是兼容的,但它们最终指向相同的类型。
  2. 作为额外的奖励,这也与C ++兼容,C ++通常隐含地具有这样的typedef
  3. 作为另一个奖励,这禁止声明一个变量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