Techniquement parlant, il n'y a pas de the printf
, chaque bibliothèque implémente la sienne, et par conséquent, votre méthode pour essayer d'étudier printf
le comportement de ce que vous faites ne sera pas d'une grande utilité. Vous pourriez essayer d'étudier le comportement de printf
sur votre système, et si tel est le cas, vous devriez lire la documentation et regarder le code source pour savoir printf
s'il est disponible pour votre bibliothèque.
Par exemple, sur mon Macbook, j'obtiens la sortie 1606416304
avec votre programme.
Cela dit, lorsque vous passez a float
à une fonction variadique, le float
est passé comme a double
. Donc, votre programme équivaut à avoir déclaré en a
tant que fichier double
.
Pour examiner les octets de a double
, vous pouvez voir cette réponse à une question récente ici sur SO.
Faisons cela:
#include <stdio.h>
int main(void)
{
double a = 1234.5f;
unsigned char *p = (unsigned char *)&a;
size_t i;
printf("size of double: %zu, int: %zu\n", sizeof(double), sizeof(int));
for (i=0; i < sizeof a; ++i)
printf("%02x ", p[i]);
putchar('\n');
return 0;
}
Lorsque j'exécute le programme ci-dessus, j'obtiens:
size of double: 8, int: 4
00 00 00 00 00 4a 93 40
Ainsi, les quatre premiers octets de la double
se sont avérés être 0, ce qui peut être la raison pour laquelle vous avez obtenu 0
la sortie de votre printf
appel.
Pour des résultats plus intéressants, nous pouvons modifier un peu le programme:
#include <stdio.h>
int main(void)
{
double a = 1234.5f;
int b = 42;
printf("%d %d\n", a, b);
return 0;
}
Lorsque j'exécute le programme ci-dessus sur mon Macbook, j'obtiens:
42 1606416384
Avec le même programme sur une machine Linux, j'obtiens:
0 1083394560