При компиляции с оптимизацией компилятор считает константные выражения и заменяет их сразу на результат.
int a = 100 * 0.5; будет заменено на загрузку в a значения 50 и эмуляция плавучки не будет линковаться к проекту.
Такое можно делать даже на AVR.
Понятно, что любые составляющие этого константного выражения могут быть #define'ами т.к. препроцессинг это просто подстановка текста.
Вычисляются выражения на этапе компиляции по тем-же правилам как и в рантайме(т.е. со всеми приколами integer promotion, приведениями типов и т.д.)
На практике я видел как даже функции из math.h с константными и известными на этапе компиляции аргументами часто считаются компилятором и в рантайме не вызываются.
К приммеру можете попробовать сделать
int a = round(1.5); и посмотреть дизасм
Цитата
Думал, дробная часть в любых числах при компиляции отбрасывается.
Как мне когда-то тут сказали: последнюю версию компилятора поставить может каждый...но надо иногда и книжки по Си читать )))))
The truth is out there...