#include <stdio.h>
main()
{
if (sizeof(int) > -1)
printf("True");
else
printf("False");
}
Il imprime False
. Pourquoi sizeof () ne renvoie-t-il pas une valeur dans les if
?
#include <stdio.h>
main()
{
if (sizeof(int) > -1)
printf("True");
else
printf("False");
}
Il imprime False
. Pourquoi sizeof () ne renvoie-t-il pas une valeur dans les if
?
sizeof
n'est pas une fonction, c'est un opérateur. Les parenthèses ne font pas partie du nom de l'opérateur.size_t
, ce qui provoque "l'habitude de l'arithmétique conversions" à qui -1
, est converti en unsigned, dans ce cas, c'est un très grand nombre.Fondamentalement, vous êtes en comparant 4 > 0xffffffffu
, ou quelque chose de proche de que les au moins. Voir cette question pour plus de détails.
sizeof(int)
et -1
.sizeof(int)
est de type size_t
, qui est garanti pour être un entier non signé. Il sera au moins aussi grand que unsigned int
.-1
est de type int
, ce qui est équivalent à signed int
.Ces état (C11 6.3.1.8):
...
Sinon, si le type de l'opérande de type entier signé représenter l'ensemble des valeurs du type de l'opérande avec unsigned de type entier, puis l'opérande de type entier non signé est converti le type de l'opérande de type entier signé.
Sinon, les deux les opérandes sont convertis en type entier non signé correspondant à le type de l'opérande de type entier signé.
int
ne peut pas s'adapter à toutes les valeurs de a, size_t
.-1
, est converti en un entier non signé. Dans la pratique, size_t
est probablement équivalent à soit unsigned int ou unsigned long. Quoi qu'il arrive lorsque vous stockez -1 dans une telle variable est mise en œuvre définies par le comportement.0xFFFFFFFF
(le nombre de FF dépend de la taille d'un int sur le système).4 > 0xFFFFFFFF
a la valeur false. Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.