Maison >développement back-end >C++ >Dans quelle mesure la conversion booléenne en entier est-elle portable en C et C ?

Dans quelle mesure la conversion booléenne en entier est-elle portable en C et C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-05 01:09:111075parcourir

How Portable is Boolean to Integer Conversion in C and C  ?

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 :

  • Faux est converti en zéro.
  • Vrai est converti en un.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn