Получается, что это полезно когда хочется и рыбку съесть, и на елку
залезть :-) Интересно... enum { e1, e2, e3 };
#define e1 e1
#define e2 e2
#define e3 e3
И пользуйся в исходном коде со всеми преимуществами типизации и в препроцессоре в #ifdef где-нибудь в пользовательской программе.
Только при таком раскладе определять enum и #define следует в одном месте, а использовать/проверять - в другом. Другие раскладки лишены смысла.