2013-09-30 4 views
1

Хотя у меня есть опыт работы с Enums в Java, перечисления типов typedef и Objective-C/C для меня новы. Я не могу понять разницу между перечислениями с именами, объявленными в начале, и перечислениями с именами, которые не были объявлены. Например:Anonymous vs Defined Enums

typedef enum Months {JAN, FEB, MAR, APR} 
    Months; 

против

typedef enum {JAN, FEB, MAR, APR} 
    Months; 

есть причина, чтобы когда-либо выбрать прежнюю форму над последним? Первое кажется излишним, если дважды указывать «Месяцы».

Этот question Выглядит очень похоже, но у него нет имени в конце, поэтому я не знаю, отвечает ли он на тот же вопрос.

+0

Вообще говоря, компилятор в порядке с либо один, но по моему опыту многие библиотеки используют первый вариант для ясности. Кроме того, это 'typedef', а не' typdef' – BrainSteel

+1

Следует также отметить, что вы должны использовать typedef NS_ENUM (type, enumName) для безопасности типа перечислимого типа. – paulrehkugler

+0

Я не понимаю, как это дубликат. Принятый ответ предполагает, что мы используем первое по сравнению с последним или макросом, как было предложено @paulrehkugler, но я спрашивал, почему вы когда-либо использовали бывших над последними, которые я еще не уверен после прочтения другой статьи. Это только историческое значение? – ThinkBonobo

ответ

0

На общих основаниях

typedef enum <tagname 1> 
{ 
//values 

}<tagname2>; 

<tagname 1> используется для определения большей ясности о том, что ваше перечисление все о

пока <tagname2> просто ссылка на имя, которое содержит все ссылки на typedef enum <tagname 1>

компилятор поддерживает оба варианта

+0

Спасибо cyberworm, один вопрос, хотя и относительно вашего ответа: Как обеспечивают большую ясность? Используются ли они с разными именами? – ThinkBonobo

+0

в соответствии с инструкциями, которые вы используете для tagname1, используется, чтобы дать больше смысла полной информации об перечислении –

Смежные вопросы