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