Стандарт для определения типа - PullRequest
17 голосов
/ 21 августа 2010

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 ]

30 голосов
/ 21 августа 2010

Если вы работаете на платформе, которая соответствует стандартам POSIX, вы должны знать, что любой идентификатор, заканчивающийся _t, зарезервирован для определенных типов POSIX, поэтому не рекомендуется придерживаться того же соглашения для ваших собственных типов.

9 голосов
/ 21 августа 2010

Вы можете просто использовать

typedef struct toto toto;
  1. struct toto (тег) и typedef имя toto (идентификатор) находятся в разных C "Namescopes", так они совместимы, но в конце они указывают на один и тот же тип.
  2. В качестве дополнительного бонуса это также совместим с C ++, который обычно неявно имеет такой typedef.
  3. В качестве еще одного бонуса это препятствует объявить переменную toto, которая может быть довольно запутанным время от времени.
6 голосов
/ 21 августа 2010

Большая часть этого сводится к личным предпочтениям, с ключом, чтобы быть последовательным (или, если у вас есть соглашение компании, используйте это).В следующей статье есть несколько руководств по именованию:

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?

4 голосов
/ 21 августа 2010

Стиль - это очень личная и очень субъективная вещь, я настоятельно призываю вас просто использовать то, что вам нравится, или любые соглашения, используемые в вашей организации.

3 голосов
/ 21 августа 2010

Я не думаю, что существует какое-либо "стандартное" соглашение об именах. На самом деле они настолько различаются между проектами (а также между другими языками, такими как C ++ или Java), что я лично принял camelCase на всех языках.

Я всегда определяю свои структуры через typedef, поэтому я просто использую любое имя, которое я дал бы в противном случае (это также то, что делает Win32 API). В случае, если мне нужна структура со ссылками, я добавляю префикс _ к имени необработанной структуры:

typedef struct _Node {
  _Node *next;
} Node;
3 голосов
/ 21 августа 2010

Следуйте тому, что остальные люди делают для вашего проекта, чтобы все оставалось единообразным. В противном случае они оба приемлемы технически.

1 голос
/ 21 августа 2010

Как правило, большинство языков допускают использование SentenceCase для нестандартизированных классов или типов.Я считаю, что это лучшая практика, и на языках, которые это позволяют, дополнительно используют пространства имен или модули для предотвращения конфликтов.В языках, которые этого не делают (например, C), префикс, где это необходимо, никогда не сбивается с пути.Чтобы использовать многоязычный пример для чего-то, над чем я сейчас работаю:

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