IAR EWB AVR: warning: integer overflow in expression
Написал microsin   
19.02.2010

Такое предупреждение компилятор может выдавать в том случае, если явно не указан тип константы.

По умолчанию компилятор предполагает, что простые константы без указания типа имеют тип signed int (целое со знаком). Тогда, например, следующий код будет выдавать предупреждение "integer overflow in expression" (и не будет всегда работать как ожидалось):

u16 days;
u32 seconds;
..
days = seconds / (60*60*24);

Здесь u16 и u32 - целые беззнаковые типы разрядности 16 и 32 бита соответственно. Чтобы выправить код, достаточно в конце константы добавить модификатор LU, явно указывающий тип:

days = seconds / (60*60*24LU);

Последнее обновление ( 19.02.2010 )