typedef的标准

时间:2010-08-21 16:21:55

标签: c 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进行后期修复。

非常感谢任何建议,

7 个答案:

答案 0 :(得分:30)

如果您正在使用遵循POSIX标准的平台,您应该知道以_t结尾的任何标识符都保留给POSIX定义的类型,因此不建议对您自己的类型遵循相同的约定。 / p>

答案 1 :(得分:9)

您可以只使用

typedef struct toto toto;
  1. struct toto(标签)和。{ typedef名称toto(标识符) 是在不同的C“名称范围”所以 它们是兼​​容的,但它们最终指向相同的类型。
  2. 作为额外奖励,这也是 通常与C ++兼容 隐含地有这样的typedef
  3. 作为另一个奖励,这抑制了 声明一个变量toto即可 有时候会很困惑。

答案 2 :(得分:6)

这大部分归结为个人偏好,关键是要保持一致(或者如果你有公司惯例,请使用它)。以下文章有一些命名指南:

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命名约定的讨论:

What are the most common naming conventions in C?

答案 3 :(得分:4)

风格是一种非常个人化且非常主观的东西,我强烈建议您只使用您喜欢的任何内容,或者您​​组织中使用的任何约定。

答案 4 :(得分:3)

按照其他人为您的项目所做的事情,以便一切都保持一致。否则它们在技术上都是可以接受的。

答案 5 :(得分:3)

我认为没有任何“标准”命名约定。实际上,它们在项目之间(以及其他语言,如C ++或Java)之间的差异很大,我个人采用了所有语言的camelCase。

我总是通过typedef定义我的结构,所以我只使用我给它的任何名称(这也是Win32 API的功能)。如果我需要一个自引用结构,我在_前加上原始结构的名称:

typedef struct _Node {
  _Node *next;
} Node;

答案 6 :(得分:1)

通常,大多数语言允许将SentenceCase用于非标准化的类或类型。我发现这是最好的做法,并且在允许它的语言中,还使用命名空间或模块来防止冲突。在没有(例如C)的语言中,必要时的前缀永远不会误入歧途。要使用多语言示例来处理我目前正在处理的事情:

C: typedef uint32_t CpfsMode;
C++: namespace Cpfs { typedef uint32_t Mode; }
Python: cpfs.Mode = int