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