Требуется ли typedef в C? - PullRequest
       14

Требуется ли typedef в C?

13 голосов
/ 30 сентября 2010

Typedef очень полезен для переносимых имен, имен тегов (typedef struct foo Foo;) и хранения читаемых сложных (функций) объявлений (typedef int (*cmpfunc)(const void *, const void *);).

Но есть ли ситуации в C, когда typedef действительно действительнонужно?Там, где вы не можете сделать то же самое, просто записав производный тип.

Для пояснения: я имею в виду пользователей языка, а не разработчиков.Весь stdint.h является хорошим примером второй категории.

Заключение

Спасибо за ваш вклад.Я думаю, что могу обобщить это как:

  • Библиотеке C99 требуется typedef для реализации различных типов (u)intN_t.
  • В C89 вы действительно хотите использовать typedefs самостоятельно для создания подобного переносимоготипов.
  • Возможно, вам понадобится typedef при использовании макроса va_arg, но я сомневаюсь, что вы встретите эти производные типы на практике.

Ответы [ 15 ]

0 голосов
/ 30 сентября 2010

Для меня typedef предоставляет абстракцию. Это держит мой код в чистоте и очень легко понять. Вы можете жить без typedef так же, как вы можете жить без всех языков высокого уровня и придерживаться ассемблера или машинного языка.

0 голосов
/ 30 сентября 2010

не означает «чрезвычайно полезно» означает «требуется»?

Мне даже не сложно подумать о проекте с struct для каждого члена структуры, указателя, аргумента и т. Д.

0 голосов
/ 30 сентября 2010

Без typedef вам придется использовать ключевое слово struct каждый раз, когда вы используете struct в объявлениях.С помощью typedef вы можете опустить это.

struct Person
{
  char * name;
};

struct Person p; /* need this here*/

typedef struct _Person
{
  char * name;
} Person;

Person p; /* with typedef I can omit struct keyword here */
0 голосов
/ 30 сентября 2010

Я не знаю случаев, когда typedef явно необходим в C.

0 голосов
/ 30 сентября 2010

Нет.Я думаю Я могу с уверенностью сказать это!

...