gcc 4.4.4 c89
Мне просто интересно, есть ли какой-то стандарт, которому следует следовать при создании типов.
, например:
typedef struct date
{
} date_t;
Я также видел, как люди ставят заглавную букву, например:
typedef struct date
{
} Date;
Или для переменных
typedef unsigned int Age;
или для этого
typedef unsigned int age_t;
. Есть ли какой-то стандарт, которому следует следовать. Лично я предпочитаю исправление сообщений с _t.
Большое спасибо за любые предложения,
Многое из этого сводится к личным предпочтениям, ключом к которым является согласованность (или, если у вас есть соглашение компании, используйте его). В следующей статье есть несколько руководств по именованию:
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?
Стиль - это очень личная и очень субъективная вещь, я настоятельно призываю вас просто использовать все, что вам нравится, или любые условности, используемые в вашей организации.
Следите за тем, что другие люди делают для вашего проекта, чтобы все оставалось согласованным. В остальном они оба приемлемы технически.
Я не думаю, что существует какое-либо «стандартное» соглашение об именах. Фактически, они настолько сильно различаются между проектами (а также между другими языками, такими как C ++ или Java), что я лично принял camelCase на всех языках.
Я всегда определяю свои структуры через typedef
, поэтому я просто использую любое имя, которое я бы дал ему в противном случае (это также то, что делает Win32 API). Если мне нужна самодостаточная структура, я добавляю префикс _
к имени необработанной структуры:
typedef struct _Node {
_Node *next;
} Node;
В целом большинство языков допускают использование SentenceCase для нестандартных классов или типов. Я считаю, что это лучшая практика, и на языках, которые это позволяют, дополнительно используйте пространства имен или модули для предотвращения конфликтов. В языках, которые этого не делают (например, C), префикс там, где это необходимо, никогда не сбивается с пути. Чтобы использовать многоязычный пример для того, над чем я сейчас работаю:
C: typedef uint32_t CpfsMode;
C++: namespace Cpfs { typedef uint32_t Mode; }
Python: cpfs.Mode = int
Вы можете просто использовать
typedef struct toto toto;
struct toto
(тег) и
typedef
имя toto
(идентификатор)
находятся в разных C "namecopes", поэтому
они совместимы, но в конечном итоге указывают на один и тот же тип. typedef
. toto
, которая может
время от времени быть довольно запутанным. Если вы работаете на платформе, соответствующей стандартам POSIX, вы должны знать, что любой идентификатор, заканчивающийся на _t
, зарезервирован для типов, определенных в POSIX, поэтому не рекомендуется следовать тому же соглашению для ваших собственных типов. .