Стандарт для typedef'ing

gcc 4.4.4 c89

Мне просто интересно, есть ли какой-то стандарт, который следует соблюдать при создании типов.

например:

typedef struct date
{
} date_t;

Я также видел, как люди клали такой капитал:

typedef struct date
{
} Date;

Или для переменных

typedef unsigned int Age;

или

typedef unsigned int age_t;

Есть ли какой-либо стандарт, который следует соблюдать. Лично я предпочитаю post fixing с помощью _t.

Большое спасибо за любые предложения,

Ответы

Ответ 1

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

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?

Ответ 2

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

Ответ 3

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

typedef struct toto toto;
  • struct toto (тег) и typedef имя toto (идентификатор) находятся в разных C-индексах ", поэтому они совместимы, но в конце они указывают на один и тот же тип.
  • В качестве дополнительного бонуса это также совместимый с С++, который обычно неявно имеет такой typedef.
  • В качестве еще одного бонуса это объявить переменную toto, которая может быть довольно запутанным время от времени.

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

typedef struct _Node {
  _Node *next;
} Node;

Ответ 7

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

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