В чем разница между объявлением перечисления с и без typedef? - PullRequest
15 голосов
/ 29 апреля 2010

Стандартный способ объявления перечисления в C ++ выглядит так:

enum <identifier> { <list_of_elements> };

Однако я уже видел некоторые объявления, такие как:

typedef enum { <list_of_elements> } <identifier>;

В чем разница между ними, если она существует? Какой из них правильный?

Ответы [ 3 ]

19 голосов
/ 29 апреля 2010

C совместимость.

В C, union, struct и enum типы должны использоваться с соответствующим ключевым словом перед ними:

enum x { ... };

enum x var;

В C ++ это не обязательно:

enum x { ... };

x var;

Так что в C ленивые программисты часто используют typedef, чтобы избежать повторения:

typedef enum x { ... } x;

x var;
4 голосов
/ 29 апреля 2010

Я считаю, что разница в том, что в стандартном C, если вы используете

enum <identifier> { list }

Вы должны были бы позвонить, используя

enum <identifier> <var>;

Где, как и в случае с typedef, вы можете вызвать его, используя

<identifier> <var>;

Однако я не думаю, что это будет иметь значение в C ++

3 голосов
/ 29 апреля 2010

Подобно тому, что @Chris Lutz сказал:

В синтаксисе старого C, если вы просто объявили:

enum myEType {   ... };

Тогда вам нужно было объявить переменные как:

enum myEType myVariable;

Однако, если вы используете typedef:

typedef enum {   ... } myEType;

Тогда вы можете пропустить ключевое слово enum при использовании типа:

myEType myVariable;

C ++ и родственные языки сняли это ограничение, но все еще распространено видеть подобный код либо в чистой среде C, либо когда он написан программистом C.

...