Схема именования для typedef

Я работаю над библиотекой, в которой широко используются такие конструкции, как

typedef struct foo_bar_s {
    ...
} foo_bar_t;

Плохая идея использовать суффикс _t, потому что это зарезервированное пространство имен POSIX. Суффикс _s для структур также довольно бесполезен. Поэтому я подумал, что могу изменить все это на

typedef struct foo_bar {
    ...
} foo_bar;

или если имя структуры не требуется

typedef struct {
    ...
} foo_bar;

Однако я больше не могу отличить typedef от обычных символов (переменных и т. д.). Действительно ли это так важно, и должен ли я использовать другую подходящую схему именования для typedefs? Или это не так важно?

Я действительно не уверен. Как вы думаете? Кроме того, какие у вас есть рекомендации для схем именования typedef?


person Community    schedule 27.07.2009    source источник


Ответы (2)


Хотя "_t" зарезервирован, очень маловероятно, что вы столкнетесь с проблемой. Однако это соглашение является пережитком более старых версий C, где этот синтаксис требовался для именования структур, поэтому в настоящее время вы можете просто написать что-то вроде следующего (опуская имена typedef и typedef):

struct name_of_struct
{
   type1 member1;
   type2 member2;
   // ...
   typeN memberN;
};

И да, вы можете использовать однострочные комментарии ("//...") в текущем стандарте C.

person Michael Aaron Safyan    schedule 27.07.2009
comment
_t действительно зарезервирован POSIX - person William Pursell; 27.07.2009
comment
Теперь, когда это сказали два человека. Я перепроверил, и оказалось, что вы правы. Я собираюсь это исправить. - person Michael Aaron Safyan; 27.07.2009
comment
_t не зарезервировано POSIX в том смысле, что никому другому не разрешено использовать такие имена. Скорее реализации POSIX могут использовать только имена типов этой формы. - person starblue; 27.07.2009
comment
На самом деле, см.: gnu.org/s/libc/manual /html_node/Reserved-Names.html Согласно документу: Имена, оканчивающиеся на '_t', зарезервированы для имен дополнительных типов. Конечно, если кто-то всегда добавляет префикс к именам своих функций и типов с именем своей библиотеки (например, mylibrary_suchandsuchtype_t), очень маловероятно, что у них возникнет конфликт с будущими версиями стандартной библиотеки C. - person Michael Aaron Safyan; 28.07.2009

Я использую соглашения об именах, использованные в C интерфейсах и реализациях Дэйва Хэнсона: с именем модуля и заглавной T. Так, например, тип последовательностей — Seq_T, а тип хэш-таблиц — Table_T. В реализации модуля Хэнсон использует #define для сокращения только до T. Это в основном Modula-3 соглашения, применяемые к программированию на C, но я обнаружил, что после краткого первоначального потрясения это работает хорошо .

person Norman Ramsey    schedule 27.07.2009