In both c and c++ enum could be defined with tag
enum e_smth {
smth_one,
smth_two,
smth_err
};
or without tag
enum {
smth_one,
smth_two,
smth_err
};
If it was defined with tag it makes sense in switch statements in both c and c++ :
e_smth some_var;
....//do some stuff with some_var
switch (some_var)
{
case smth_one:
break;
case smth_two:
break;
}
will produce -Wswitch warning if this will be compiled with gcc or g++.
It makes sense in functions declarations and variables initialization in c++ :
e_smth var;
var=99;
Will produce -fpermissive error if compiled with g++.
Both types with or without tag could be used as one file #define macro without parameters.
update
could be used as one file
#definemacro without parameters
meant : Instead of writing #define MAX 1000 in file and adding MAX to global use enum { MAX=1000 } just in file scope
And what about anonymous enums, I've found just one use cases:
definition like typedef enum { a,b,c } some_t; makes it work like enum with tag
Question:
if I haven't yet described all reasonable use cases, what for anonymous enums should be used?