Cela n'a pas d'importance, et ce n'est pas spécifié (consultez la norme C11 n1570 ). Soyez conscient de la as-if règle. Cela dépend en fait de la façon dont votre compilateur est optimisation de .
Si vous mettez votre code dans un simple main
et compilez-la avec les optimisations activées, la fonction CCG Le compilateur pourrait vous donner un programme vide (puisque tous les calculs peuvent être faits au moment de la compilation, et que d
n'est pas utilisé pour les effets secondaires observables).
Si vous avez GCC, compilez une fonction avec votre code en utilisant gcc -O3 -S -fverbose-asm
et regarder à l'intérieur du produit *.s
fichier assembleur. Vous serez surpris.
Plus précisément, avec GCC 8 sur Linux/Debian/x86-64, la compilation de
// file dvep.c
#include <math.h>
int
main (void)
{
int i = 0;
double d = sqrt ((double) i);
return 0;
}
en utilisant le gcc -O3 -S -fverbose-asm dvep.c
La commande produit un dvep.s
dont le main
se réduit à une fonction :
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
# dvep.c:9: }
xorl %eax, %eax #
ret
.cfi_endproc
et vous voyez alors qu'aucune opération en virgule flottante n'a lieu au moment de l'exécution à l'intérieur de main