Почему я должен иметь перечисление, объявленное с помощью typedef в C ++? - PullRequest
5 голосов
/ 29 сентября 2010

У меня был код, который выглядел так:

enum EEventID {
  eEvent1,
  eEvent2,
  ...
  eEventN };

И он был рассмотрен и изменен на

typedef enum {
  eEvent1,
  eEvent2,
  ...
  eEventN } EEventID;

В чем разница между ними?Зачем вносить изменения?Когда я посмотрел на этот вопрос , единственное упоминание typedefs было отклонено.

Ответы [ 5 ]

11 голосов
/ 29 сентября 2010

Они идентичны в C ++, но не совпадают в C - в C, если вы используете typedef, вы получаете код, совместимый между C и C ++ (поэтому его можно свободно использовать в заголовочном файле, который может использоваться для C или C ++). Это единственная причина, по которой я вижу, что я предпочитаю это.

2 голосов
/ 29 сентября 2010

typedef - лишний in C ++ .
В C это необходимо, если вы хотите определить переменную вашего типа перечисления следующим образом: EEventID event;, в противном случае вам бы пришлось указать, что это перечисление: enum EEventID event;.

2 голосов
/ 29 сентября 2010

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

2 голосов
/ 29 сентября 2010

Я нашел один возможный ответ здесь : "Ну, это хорошо для языка C, в котором, если вы используете enum или структуру, которые являются пользовательскими типами данных, вам нужно указать enum или struct ключевое слово при его использовании. "

Возможно, ваш рецензент - хардкорный C-кодер, и он делает это автоматически по привычке.

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

Ваш рецензент не знает своего C из своего C ++.

...