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
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.
Malgré la tolérance silencieuse de la norme, de nombreux compilateurs, y compris VS2008, appliquent des limitations :
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) { ... }
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.
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.
Heureusement, C 17 a introduit une nouvelle syntaxe qui résout ce problème :
if (int a = Func1(), b = Func2(); a && b) { ... }
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!