Не думаю, что есть хороший способ сделать это. Но, при условии, что вы не используете =
в своем перечислении, например enum foo {a=0, b=4}
, вы можете сделать это следующим образом:
typedef enum{
AB,
CD,
A_max // Extra field that should be last
} A;
void f(A input){
assert(input >= 0 && input < A_max);
// Do something
}
Это работает, потому что, если =
не используется, первый элемент будет ноль, и все последующее добавит 1 для каждого из них.