Почему константы перечисления C нуждаются в имени? Потому что это:
#include <stdio.h>
enum {NO, YES};
int main(void)
{
printf("%d\n", YES);
}
работает так же, как это:
#include <stdio.h>
enum boolean {NO, YES};
int main(void)
{
printf("%d\n", YES);
}