Неважно и не указано (см. Стандарт C11 n1570 ).Помните о как-будто правиле.На самом деле это зависит от того, как ваш компилятор оптимизирует .
Если вы поместите свой код в какую-то функцию main
и скомпилируете ее с включенной оптимизацией, компилятор GCC может дать вам пустую программу (поскольку все вычисления могут быть выполнены во время компиляции, и поскольку d
не используется для наблюдаемых побочных эффектов).
Если у вас есть GCC, скомпилируйте функцию с вашим кодомиспользуя gcc -O3 -S -fverbose-asm
и загляните внутрь созданного файла ассемблера *.s
.Вы будете удивлены.
В частности, с GCC 8 в Linux / Debian / x86-64, компиляция
// file dvep.c
#include <math.h>
int
main (void)
{
int i = 0;
double d = sqrt ((double) i);
return 0;
}
с использованием команды gcc -O3 -S -fverbose-asm dvep.c
создает файл dvep.s
чья функция main
уменьшена до:
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
# dvep.c:9: }
xorl %eax, %eax #
ret
.cfi_endproc
, и вы увидите, что во время выполнения внутри main
не происходит операций с плавающей запятой