Maison > développement back-end > C++ > L'instruction \'if\' de C peut-elle gérer plusieurs déclarations de variables ?

L'instruction \'if\' de C peut-elle gérer plusieurs déclarations de variables ?

Patricia Arquette
Libérer: 2024-11-27 17:58:14
original
741 Les gens l'ont consulté

Can C  's

Déclarations de variables dans les expressions "if" : normes et bizarreries du compilateur

Le problème

En C, les déclarations de variables dans les conditions de l'instruction "if" ont été un sujet de confusion et de limitations du compilateur. Des extraits de code comme les suivants soulèvent souvent des questions :

if (int a = Func1()) { ... } // Works
if ((int a = Func1())) { ... } // Fails to compile
if ((int a = Func1()) && (int b = Func2())) { ... } // Works
Copier après la connexion

La norme C 03 autorise les déclarations de variables dans des conditions "if", avec une portée s'étendant jusqu'à la fin des sous-instructions contrôlées par la condition. Cependant, il ne spécifie pas de restrictions sur les parenthèses ou les déclarations multiples.

La limitation

Malgré la tolérance silencieuse de la norme, de nombreux compilateurs, y compris VS2008, appliquent des limitations :

  • Les parenthèses ne peuvent pas joindre la déclaration.
  • Une seule déclaration est autorisée par condition.

Un exemple plus ennuyeux

Cette limitation peut être particulièrement ennuyeuse lors de la déclaration de plusieurs variables dans une condition et de leur attribuer des valeurs spécifiques. Considérez :

bool a = false, b = true;
if (bool x = a || b) { ... }
Copier après la connexion

Pour saisir le corps "if" avec x défini sur false, des parenthèses sont requises autour de la déclaration. Cependant, comme les parenthèses sont interdites, x doit être déclaré en dehors du corps, ce qui le fait s'étendre à une portée plus large.

En conclusion

Avant C 17, la syntaxe souhaitée pour les déclarations de variables multiples dans "if " Les conditions n'étaient pas conformes à la norme. Cependant, les compilateurs imposaient souvent des limitations supplémentaires.

La solution C 17

Heureusement, C 17 a introduit une nouvelle syntaxe qui résout ce problème :

if (int a = Func1(), b = Func2(); a && b) { ... }
Copier après la connexion

En C 17, vous pouvez maintenant utiliser un point-virgule pour séparer la déclaration de la condition réelle, permettant ainsi plusieurs déclarations de variables et parenthèses.

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!

source:php.cn
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