Препроцессор просто заменяет символы последовательно всякий раз, когда они появляются.Порядок определений в данном случае не имеет значения, b
сначала заменяется на a
, а оператор printf становится
printf("%i", a);
и после замены a
на 170
оно становится
printf("%i", 170);
Если порядок определения был изменен, то есть
#define a 170
#define b a
Тогда препроцессор сначала заменяет a
, а второе определение становится
#define b 170
Итак, наконец, оператор printf становится
printf("%i",170);
Это работает для любого компилятора .