Не могу найти ошибку в коде?
typedef	unsigned int un;
Работает. А если бы вы попытались самостоятельно стать препроцессором и подставили бы свои макросы, то увидели бы что в итоге получается unsigned int; a = 1, b = 2;
Просто уберите ; в конце макроса и будет вам щастье.
Точки с завятой в дефайнах уберите