Maison > Article > développement back-end > Les constantes non définies sont-elles évaluées comme 0 dans les macros C et C `#if` ?
Une hypothèse courante est que les préprocesseurs interprètent les constantes non définies comme 0 lorsqu'elles sont utilisées dans des conditions #if . Mais peut-on s'y fier de manière cohérente ou cela donne-t-il des résultats imprévisibles ?
La réponse réside dans les normes C99 et C 17.
Norme C99
La norme C99 précise au §6.10.1¶3 que :
"Après tous remplacements en raison de l'expansion de la macro et de l'opérateur unaire défini, tous les identifiants restants sont remplacés par le numéro pp 0."
Norme C 17
De même, le La norme C 17 indique au §16.1 ¶4 :
"Après que tous les remplacements dus à l'expansion de la macro et à l'opérateur unaire défini aient été effectués, tous les identifiants et mots-clés restants, à l'exception de vrai et faux, sont remplacés par le numéro pp 0."
Conclusion
Par conséquent, il est effectivement fiable en C et C pour supposer que les constantes non définies sont évaluées comme 0 dans les conditions #if. Ce comportement est explicitement défini dans les normes du langage, garantissant une exécution cohérente sur différents compilateurs et plates-formes.
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!