_t
Зазвичай обертає непрозоре визначення типу.
GCC просто додає імена, які закінчуються, _t
до зарезервованого простору імен, яке ви не можете використовувати, щоб уникнути конфліктів із майбутніми версіями Standard C та POSIX (посібник з бібліотеки GNU C) . Після деяких досліджень я нарешті знайшов правильну посилання всередині стандарту POSIX (1003.1, обгрунтування (інформативне)):
B.2.12 Типи даних
Вимога про те, що додаткові типи, визначені в цьому розділі, закінчуються на "_t" ', викликана проблемою забруднення простору імен. Важко визначити тип (де цей тип не визначений IEEE Std 1003.1-2001) в одному файлі заголовка і використовувати його в іншому без додавання символів до простору імен програми. Щоб дозволити виконавцям надавати власні типи, всі відповідні програми повинні уникати символів, що закінчуються символом "_t", що дозволяє виконавцю надавати додаткові типи. Оскільки основне використання типів полягає у визначенні членів структури, які можна (і в багатьох випадках повинні) додавати до структур, визначених у IEEE Std 1003.1-2001, необхідність у додаткових типах є переконливою.
Коротше кажучи, Стандарт каже, що є великі шанси на розширення списку типів стандарту, тому Стандарт обмежує _t
простір імен для власного використання.
Наприклад, ваша програма відповідає POSIX 1003.1 Випуски 6, і ви визначили тип foo_t
. POSIX 1003.1 Випуски 7 , врешті-решт, випускається із заново визначеним типом foo_t
. Ваша програма не відповідає новій версії, що може бути проблемою. Обмеження _t
використання перешкоджає рефакторингу коду. Таким чином, якщо ви прагнете до відповідності POSIX, вам неодмінно слід уникати _t
стандартних стандартів.
Побічна примітка: особисто я намагаюся дотримуватися POSIX, тому що я думаю, що це дає хороші основи для чистого програмування. Більше того, мені дуже подобаються вказівки щодо стилю кодування Linux (глава 5) . Є кілька вагомих причин, чому не використовувати typedef. Сподіваюся, що це допоможе!
int_t
визначено? Якщо це завжди визначається якint
, це не корисно; набагато зрозуміліше використовуватиint
безпосередньо. Якщо це не завжди визначається якint
(скажімо, якщо це могло бутиlong int
абоshort int
), то це погано вибране і заплутане ім'я.