typedef的标准

ant*_*009 17 c typedef

gcc 4.4.4 c89

我只是想知道在创建类型时是否应该遵循任何标准.

例如:

typedef struct date
{
} date_t;
Run Code Online (Sandbox Code Playgroud)

我也看到人们把这样的资本投入:

typedef struct date
{
} Date;
Run Code Online (Sandbox Code Playgroud)

或者变量

typedef unsigned int Age;
Run Code Online (Sandbox Code Playgroud)

或这个

typedef unsigned int age_t;
Run Code Online (Sandbox Code Playgroud)

是否有任何应遵循的标准.我个人更喜欢用_t进行后固定.

非常感谢任何建议,

CB *_*ley 30

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


Jen*_*edt 9

你可以简单地使用

typedef struct toto toto;
Run Code Online (Sandbox Code Playgroud)
  1. struct toto(标签)和 typedef名称toto(标识符),可在不同C"名称范围",所以它们是相容的,但它们指向到底相同的类型.
  2. 作为额外的奖励,这也与C++兼容,C++通常含有这样的typedef.
  3. 作为另一个奖励,这禁止声明一个toto有时令人困惑的变量.


Edw*_*eno 7

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

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;
Run Code Online (Sandbox Code Playgroud)

这里有一个关于C命名约定的早期讨论:

C中最常见的命名约定是什么?

  • 鉴于'_t'是为POSIX保留的,我建议不要使用'_t'并提出一个对你有意义的命名约定(例如,参见@ casablanca的答案).我只引用了这篇文章,这只是一种意见. (4认同)

cas*_*nca 5

我认为没有任何“标准”命名约定。事实上,它们在项目之间(以及在 C++ 或 Java 等其他语言之间)差异很大,以至于我个人在所有语言中都采用了驼峰命名法。

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

typedef struct _Node {
  _Node *next;
} Node;
Run Code Online (Sandbox Code Playgroud)

  • 带有前导下划线后跟大写字母或另一个下划线的名称是保留的。(带有前导下划线后跟小写字母的名称可能会根据范围保留;更容易避免前导下划线。)http://stackoverflow.com/questions/228783/what-are-the-rules-about-using -an-underscore-in-ac-identifier/228797#228797 (8认同)