Каково различие между объявлением перечисления с и без 'определения типа'?

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

enum <identifier> { <list_of_elements> };

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

typedef enum { <list_of_elements> } <identifier>;

Каково различие между ними, если оно существует? Какой корректен?

15
задан freitass 28 April 2010 в 21:09
поделиться

3 ответа

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

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

enum x { ... };

enum x var;

В C ++ это не необходимо:

enum x { ... };

x var;

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

typedef enum x { ... } x;

x var;
19
ответ дан 1 December 2019 в 02:45
поделиться

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

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

 enum myEType {...}; 
 

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

 enum myEType myVariable; 
 

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

 typedef enum {...} myEType; 
 

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

 myEType myVariable; 
 

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

3
ответ дан 1 December 2019 в 02:45
поделиться

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

enum <identifier> { list }

, вам придется вызывать его, используя

enum <identifier> <var>;

Where as с typedef вокруг него вы могли бы вызвать его, используя только

<identifier> <var>;

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

4
ответ дан 1 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: