Стандарт для определения типов

gcc 4.4.4 c89

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

, например:

typedef struct date
{
} date_t;

Я также видел, как люди ставят заглавную букву, например:

typedef struct date
{
} Date;

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

typedef unsigned int Age;

или для этого

typedef unsigned int age_t;

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

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

17
задан Justin Ethier 21 August 2010 в 16:36
поделиться

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;

Ранее обсуждались соглашения об именовании C здесь:

Какие наиболее распространенные соглашения об именовании в C?

7
ответ дан 30 November 2019 в 10:22
поделиться

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

4
ответ дан 30 November 2019 в 10:22
поделиться

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

3
ответ дан 30 November 2019 в 10:22
поделиться

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

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

typedef struct _Node {
  _Node *next;
} Node;
3
ответ дан 30 November 2019 в 10:22
поделиться

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

C: typedef uint32_t CpfsMode;
C++: namespace Cpfs { typedef uint32_t Mode; }
Python: cpfs.Mode = int
1
ответ дан 30 November 2019 в 10:22
поделиться

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

typedef struct toto toto;
  1. Структура struct toto (тег) и typedef имя toto (идентификатор) находятся в разных C "namecopes", поэтому они совместимы, но в конечном итоге указывают на один и тот же тип.
  2. В качестве дополнительного бонуса это также совместим с C ++, который обычно неявно имеет такой typedef .
  3. В качестве еще одного бонуса это препятствует объявить переменную toto , которая может время от времени быть довольно запутанным.
9
ответ дан 30 November 2019 в 10:22
поделиться

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

30
ответ дан 30 November 2019 в 10:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: