Навскидку дифайны хуже энумов при вызове функций, т.к. не проверяют принадлежность аргумента набору допустимых значений, и дифайны проигрывают средству typedef в безопасности при объявлении пользовательских типов. В остальном - не грех и применить под шумок)