В чем разница между объявлением перечисления с типом typedef и без него?
Стандартный способ объявления перечисления в С++ выглядит следующим образом:
enum <identifier> { <list_of_elements> };
Однако, я уже видел некоторые объявления вроде:
typedef enum { <list_of_elements> } <identifier>;
В чем разница между ними, если она существует? Какой из них правильный?
Ответы
Ответ 1
C.
В C, union
, struct
и enum
типы должны использоваться с соответствующим ключевым словом перед ними:
enum x { ... };
enum x var;
В С++ это необязательно:
enum x { ... };
x var;
Итак, на C ленивые программисты часто используют typedef
, чтобы не повторять себя:
typedef enum x { ... } x;
x var;
Ответ 2
Я считаю, что разница в том, что в стандарте C, если вы используете
enum <identifier> { list }
Вам нужно будет вызвать его, используя
enum <identifier> <var>;
Где, как и в typedef вокруг него, вы можете называть его, используя только
<identifier> <var>;
Однако, я не думаю, что это имело бы значение в С++
Ответ 3
Подобно тому, что сказал @Chris Lutz:
В синтаксисе old-C, если вы просто объявили:
enum myEType { ... };
Затем вам нужно было объявить переменные как:
enum myEType myVariable;
Однако, если вы используете typedef:
typedef enum { ... } myEType;
Затем вы можете пропустить ключевое слово enum при использовании типа:
myEType myVariable;
С++ и родственные языки покончили с этим ограничением, но его все еще распространено, чтобы увидеть код, подобный этому, либо в чистой среде C, либо когда написан программистом C.