Maison > développement back-end > C++ > Les constantes non définies sont-elles évaluées à 0 dans les conditions #if en C et C ?

Les constantes non définies sont-elles évaluées à 0 dans les conditions #if en C et C ?

Susan Sarandon
Libérer: 2024-11-15 12:43:02
original
610 Les gens l'ont consulté

Do Undefined Constants Evaluate to 0 in #if Conditions in C and C  ?

Constantes non définies et évaluation de condition #if en C et C

Dans la logique du préprocesseur, les macros et les constantes jouent souvent un rôle crucial. Un scénario courant se produit lorsqu'il s'agit de constantes non définies dans des conditions #if. Ici, nous allons explorer s'il est valide de s'appuyer sur un comportement prévisible de ces constantes non définies.

Problème :

Les développeurs supposent souvent que les constantes non définies prennent une valeur de 0 lorsqu'il est utilisé dans les évaluations #if. Cette hypothèse est-elle fiable, ou devons-nous nous attendre à un comportement indéfini de constantes non définies ?

Réponse :

Oui, vous pouvez vous fier à cette hypothèse. La norme C99 précise clairement au §6.10.1 ¶3 :

Une fois tous les remplacements dus à l'expansion de la macro et à l'opérateur unaire défini effectués, tous les identifiants restants sont remplacés par le numéro pp 0

De même, la norme C (§16.1 ¶4) dicte :

Après tous les remplacements dus à l'expansion des macros et à la définition opérateur unaire ont é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

En d'autres termes, après les expansions de macro et d'autres étapes de prétraitement, tout identifiant ou constante non défini qui apparaît dans une condition #if est automatiquement remplacé par la valeur 0. Ce comportement est cohérent entre C et C.

Ce comportement prévisible permet aux développeurs d'utiliser facilement des constantes non définies comme indicateurs ou des espaces réservés dans les conditions #if sans risquer des résultats ou des erreurs non définis. Lorsque la constante non définie n'est pas définie avant la phase de prétraitement, le compilateur la traite comme 0 par défaut.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal