Стандарт для 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