2 вопроса - PullRequest
       10

2 вопроса

0 голосов
/ 27 апреля 2009

Часть 1

Есть ли в C разница между объявлением перечисления следующим образом:

typedef enum{VAL1, VAL2,} firstEnum;

и вот так:

enum secondEnum{Val1, Val2,};

Помимо того, что при использовании secondEnum вы должны написать:

enum secondEnum...;

Часть 2

Кроме того, правильно ли я считаю, что следующее эквивалентно:

enum{Val1, Val2,} enum1;

и

enum thirdEnum{Val1, Val2,}
enum thirdEnum enum1;

Спасибо

1 Ответ

2 голосов
/ 27 апреля 2009

В первой части, очевидно, есть различие: сначала вы объявляете firstEnum как typedef для (анонимного) перечислимого типа, тогда как во второй secondEnum есть тег для перечислимого типа, и есть не задействован typedef. Первый рекомендуется для простоты использования, как вы заметили.

Во второй части они не эквивалентны - первая объявляет анонимный перечислимый тип и определяет enum1 как принадлежащий этому типу. Второй объявляет именованный перечислимый тип, а затем объявляет enum1 того же типа. Значение заключается в том, что вы можете использовать именованный тип в других частях кода, в то время как в первом вы не можете использовать его где-либо еще, поэтому вам, вероятно, придется использовать целочисленные значения в качестве псевдонима для значений перечисляемого типа.

...