Maison >développement back-end >C++ >Les conversions « bool » en « int » se comporteront-elles toujours de manière prévisible en C et C99 ?

Les conversions « bool » en « int » se comporteront-elles toujours de manière prévisible en C et C99 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-16 16:07:17531parcourir

Will `bool` to `int` Conversions Always Behave Predictably in C   and C99?

Conversion booléenne en int : portabilité et assertions

En C et même en C99, les développeurs exploitent souvent la conversion implicite de valeurs booléennes (bool) en entiers (int) . Cependant, il est crucial de comprendre la portabilité et les implications de cette conversion pour garantir l'exactitude du code.

Considérez les extraits de code suivants :

int x = 4 < 5;
assert(x == 1);

x = 4 > 5;
assert(x == 0);

Quels sont les résultats attendus de ces assertions ? Sont-ils garantis de réussir dans tous les contextes ?

Portabilité de la conversion Bool en Int

La conversion implicite de bool en int est définie dans le standard C :

  • Pour bool, "false" se convertit en 0, tandis que "true" se convertit en 1.
  • Pour C99, où _Bool remplace bool et vrai/faux sont des macros, les mêmes règles de conversion s'appliquent.

Cette conversion est entièrement portable et garantit un comportement correct sur tous les compilateurs conformes. .

Évaluation des assertions

Basée sur la conversion règles, on peut évaluer les assertions :

  • 4 < 5 est évalué à vrai, ce qui est converti en 1. Ainsi, x == 1 est valable.
  • 4 > 5 est évalué à faux, qui se convertit en 0. Par conséquent, x == 0 est valable.

Conclusion

Dans le contexte du code fourni, les assertions réussira car la conversion bool en int est implicitement effectuée et les valeurs attendues (1 pour "true" et 0 pour "false") sont attribuées correctement. Cependant, il est important de noter que ce comportement ne se limite pas aux extraits de code présentés et s'étend à toute situation dans laquelle de telles conversions sont utilisées.

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