Одним из примеров является умножение.Скажем, у вас есть следующее:
#define KILO 1024
что произойдет, если вы позже выполните следующее?
unsigned long long val = KILO * KILO * KILO * KILO * KILO * ...
вы можете подумать, что умножение будет оцениваться с типом unsigned long long
,но в действительности все эти умножения происходят на int
.Так что, если ваша директива не имеет тип-трансляции или, что еще лучше, это не 1024L
, вы можете столкнуться с неожиданным поведением из-за переполнения int
, даже если тип вашей переменной может фактически содержать результат.