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
#define
macro 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?