Если я делаю 'определение типа' в C или C++, когда я должен добавить '_t' в конце типа typedef'ed? [дубликат]

Этот вопрос уже имеет ответ здесь:

Я смущен, когда должен я добавлять запаздывание _t кому: typedef'типы редактора?

Например, если я делаю это:

typedef struct image image_t;

или это:

typedef struct image image;

Каковы общие правила?

Другой пример, должен я делать это:

typdef enum { ARRAY_CLOSED, ARRAY_OPEN, ARRAY_HALFOPEN } array_type_t;

или это:

typdef enum { ARRAY_CLOSED, ARRAY_OPEN, ARRAY_HALFOPEN } array_type;

Просветите меня.

Спасибо, Boda Cydo.

48
задан bodacydo 12 July 2010 в 01:42
поделиться

5 ответов

В POSIX имена, заканчивающиеся на _t , зарезервированы, поэтому, если вы ориентируетесь на систему POSIX (например, Linux), вам не следует заканчивать свои типы с _t .

58
ответ дан 26 November 2019 в 18:48
поделиться

Я лично презираю соглашение _t. Однако до тех пор, пока вы последовательны, это не имеет значения.

Обратите внимание, что (как показывают другие ответы здесь), если вы кодируете под какой-то другой стандарт, например POSIX, вам нужно проверить, все ли в порядке в этом стандарте, прежде чем использовать такие имена.

17
ответ дан 26 November 2019 в 18:48
поделиться

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

Для обоснования. Очень часто имя переменной является аллюзией на типизированный тип. Например, std::size_t size;, array_t array и т.д. Я обнаружил, что легче подобрать достойное имя для переменной, когда тип содержит суффикс _t. Это также напоминает мне, что это типизированный примитив, а не какой-нибудь другой зверь, например, класс.

0
ответ дан 26 November 2019 в 18:48
поделиться

Выбирайте хорошие имена для ваших типов, как и для ваших переменных, функций и всего остального. Хорошее имя не имеет встроенной избыточной информации, которая затрудняет чтение кода - _t никогда не поможет вам, если у вас есть хорошее имя для начала.

Между прочим: typedef image image; не имеет никакого смысла, поскольку он просто превращает изображение в typedef для самого себя.

0
ответ дан 26 November 2019 в 18:48
поделиться

Когда следует использовать _t? Никогда? Он зарезервирован основным стандартом (POSIX), и даже если сейчас это не так, ваш код когда-нибудь может быть использован в среде POSIX, поэтому использование _t - плохая идея.

Я бы пошел дальше и сказал, что чрезмерное использование typedef вообще плохо. Если ваш тип - struct, union или enum, используйте эти ключевые слова при объявлении переменных, и это сделает ваш код более понятным. Использование typedef лучше приберечь для тех случаев, когда вы хотите сделать базовый тип невидимым для целей абстракции/инкапсуляции. Несколько отличных примеров из стандартного языка C: size_t, int32_t, mbstate_t и stdio FILE.

Одни из худших злоупотреблений typedef - в Windows API (WORD, DWORD, INT, LPSTR и т.д.) и glib (gint, gchar и т.д.). Создание дубликатов стандартных типов C с тем же предполагаемым использованием только запутывает и служит для блокировки разработчиков в вашей библиотеке/платформе, загрязняя весь код этими нестандартными именами типов.

7
ответ дан 26 November 2019 в 18:48
поделиться