Цитата(609 @ Oct 5 2010, 12:26)

4.18 b700 WinAVR 20100110
Еще имеет значение чип, я выбрал ATmega168
Поставил эту версию, проблема исчезла, и уменьшился код: при компиляции в обоих случаях выдает 168 байт.
Цитата(Сергей Борщ @ Oct 5 2010, 14:23)

А если напишете #define WDR asm volatile ("wdr"), то не сможет.
Спасибо за подсказку, так действительно получается более оптимально.
Цитата(zhevak @ Oct 5 2010, 14:50)

Смею предположить, что оптимизирующий компилятор в одном случае может вставлять вызов функции, а в другом -- осуществлять in-line подстановку тела этой функции в месте ее вызова. Попробуйте отключить оптимизацию и, как абсолютно правильно сказал MrYuran, посмотрите листинги. Вы не только ответите на свой вопрос, но и существенно придвинетесь в сторону профи.
Листинг смотрел, там действительно в одном случае функция вызывается, а в другом подставляется.
Только я так и не понял, почему компилятор подставляет 100 байт тела функции, вместо того чтобы вызвать функцию 3 байтами.