Conversion bool en int : une plongée approfondie dans sa portabilité
Question originale :
Dans quelle mesure la conversion d'une valeur booléenne en entier est-elle portable ? Pouvons-nous être certains que les assertions suivantes sont transmises sur tous les systèmes ?
int x = 4 < 5; assert(x == 1); x = 4 > 5; assert(x == 0);
Réponse :
Oui, la conversion de bool en int est entièrement portable et conforme à les normes C et C.
Explication :
En C , la conversion de bool en int est implicite, comme spécifié dans la norme C (§4.7/4 de la norme C 11 ou 14, §7.8/4 de la norme C 17, §7.3.9/2 de la norme 20) . Selon ces normes :
Dans notre exemple :
int x = 4 < 5;
Se traduit exactement par :
int x = true;
Puisque true est converti en un, le l’affirmation passera. De même, dans la deuxième assertion, false est converti en zéro, ce qui entraîne le succès de l'assertion.
Informations supplémentaires pour C :
Avant C99, C n'avait pas un type booléen. Cependant, C99 a introduit le type _Bool et la macro bool (définie dans le fichier d'en-tête stdbool.h) qui se développe en _Bool. Les macros true et false sont également définies dans le même fichier d'en-tête, où true se développe jusqu'à la constante entière 1 et false se développe jusqu'à la constante entière 0.
Selon le §7.16 de C99 :
#define bool _Bool #define true 1 #define false 0
Par conséquent, la conversion bool en int dans C99 et versions ultérieures se comporte de la même manière que 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!