Як слід маркувати типи в програмах C і C ++?


12

У цій моїй відповіді я використав _tнаприкінці типів, які закінчилися в кращому випадку суперечливими. Це практика, яку я використовую в своїх поточних проектах.

typedef struct {
    int x;
    int y;
} point_t;

Це повинно було відповідати типам C від stddef.hподібних size_tабо ptrdiff_t. Однак, згідно з певними коментарями до моїх запитань, _tпоштовий індекс, як видається, зарезервований для POSIX. Що я повинен використовувати замість _t? Або _tвсе одно продовжувати використовувати ?

Це питання стосується як C, так і C ++. Якщо ці мови мають різні умови, сміливо відповідайте на це.


2
Однією загальною умовою є наявність імен класів, які LookLikeThis. У цей момент вам навіть не потрібні суфікси. (Це частіше для Java, .net і т. Д. Але воно працює і в C ++.)
cHao

1
врешті-решт, це форма угорської нотації. І ця дискусія нескінченна. Я вже зараз проти цього і йду з рішенням Хахо. Чому? Оскільки я користувався угорською нотацією близько 4 років для всього, то вирішив зробити проект без цього і зовсім не пропустив. І не витрачали на це часу. Тож я повністю відмовився від нього, оскільки він, мабуть, не мав для мене ніякої цінності. І я ніколи не оглядався.
stijn

1
Дивіться це запитання щодо зарезервованих ідентифікаторів (у тому числі _t) stackoverflow.com/a/228797/14065
Martin York

Відповіді:


16

Не існує єдиної думки в спільнотах C і C ++ щодо типів імен.

Хоча _tсуфікс дійсно зарезервований POSIX , деякі захищають використання _tсуфікса і для власних типів, а інші настільки ж твердо стверджують, що не слід спокушати долю, ризикуючи повторити імена з POSIX.

Альтернативні умови іменування пропонують використовувати префікс для типів, таких як Cабо T.


16

Я вважаю суфікси досить некрасивими, тому уникаю _tі т. Д. Хорошою альтернативою є використання великої літери для запуску імен типу, як Pointу вашому прикладі вище.


3
і мені здається, що стиль відрізняється від стандартних типів С, тому, прочитавши код, ви легко зможете знайти, що є від клієнтської програми та що таке API
Nikko

1
Також моя улюблена техніка. Типи мають початкову велику літеру. Усі інші ідентифікатори не є типами, і тому їх легко помітити.
Мартін Йорк

Я завжди думав, що це також виглядає досить потворно. Приємно бачити, що зі мною згодні інші.
syb0rg

Я використовую PascalCase лише для типів вказівників (Через такі мови, як C # та Java, де PascalCase означає клас, тобто посилання на дані), але я отримую там, звідки ви родом.
yyny

1

Це залежить від вас. Якщо у вас немає конфлікту із застереженими словами, вам добре піти. Однак врахуйте сценарій, коли ви працюєте в компанії, і кілька людей отримують доступ до однієї бази коду, і ваш код потрапляє до людини, яка не знає вашої звички. Потім він може вважати, що це зарезервований тип, особливо якщо ви пишете щось на кшталт point_t. Отже, тримайте це простіше, наприклад, точка простіша, ніж point_t. І якщо ви хочете щось додати, додайте вам ініціали.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.