Conversion implicite : transformation bool en int
En C , une conversion non intuitive se produit lors de l'attribution d'une expression booléenne à une variable int. Considérez l'extrait de code suivant :
int x = 4 < 5; assert(x == 1); x = 4 > 5; assert(x == 0);
Détails de la conversion
Selon la norme C (§4.7/4 en C 11/14, §7.8/4 en C 17, §7.3.9/2 en C 20) :
Par conséquent, dans le code donné, 4 < 5 est évalué à vrai, qui est converti en 1 et stocké dans x, tandis que 4 > 5 est évalué à false, qui est converti en 0 et stocké dans x.
Portabilité
Cette conversion implicite de bool en int est portable sur toutes les plateformes C.
Comparaison avec C
Contrairement à C , C ne prend pas explicitement en charge le type de données bool antérieur à la norme C99. Cependant, la norme C99 a introduit le type _Bool, qui équivaut à bool en C . En C99, les macros true et false se développent respectivement en constantes entières 1 et 0. En conséquence, le comportement de conversion bool en int est similaire en C et en C.
Conclusion
La conversion implicite bool en int dans le code donné est conforme à la norme et portable sur les plates-formes C. Bien que cela puisse paraître peu orthodoxe, cela est essentiel pour comprendre le comportement sous-jacent du langage C.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!