В обоих случаях c и С++ enum
могут быть определены с тегом
enum e_smth {
smth_one,
smth_two,
smth_err
};
или без тега
enum {
smth_one,
smth_two,
smth_err
};
Если он был определен с помощью тега, он имеет смысл в операторах switch
как в c, так и в С++:
e_smth some_var;
....//do some stuff with some_var
switch (some_var)
{
case smth_one:
break;
case smth_two:
break;
}
будет выдавать предупреждение -Wswitch
, если оно будет скомпилировано с помощью gcc или g++.
Это имеет смысл в инициализации объявлений и инициализации переменных в С++:
e_smth var;
var=99;
Произведет ошибку -fpermissive
, если скомпилирован с g++.
Оба типа с тегом или без него могут использоваться как один макрос файла #define
без параметров.
Обновление
может использоваться как один файл
#define
макрос без параметров
означало: вместо записи #define MAX 1000
в файл и добавления MAX к глобальному использованию enum { MAX=1000 }
только в области содержимого
А как насчет анонимных перечислений, я нашел только один случай использования:
определение типа typedef enum { a,b,c } some_t;
заставляет его работать как enum с тегом
Вопрос:
если я еще не описал все разумные варианты использования, что использовать анонимные перечисления?