Maison > Article > développement back-end > Pourquoi `int x = x 1;` fonctionne-t-il en C/C ?
Initialisation déclarative des variables en C/C : un comportement surprenant
La syntaxe familière de déclaration et d'initialisation en C/C permet l'initialisation de variables lors de leur déclaration. Cependant, un comportement particulier apparaît lorsque la variable à initialiser apparaît dans l'expression d'initialisation elle-même. Considérez l'extrait de code :
<code class="cpp">int x = x + 1;</code>
Ce code se compile avec succès et, étonnamment, la valeur de x devient 1 après l'exécution. Ce comportement peut sembler contre-intuitif, car la variable x ne semble pas avoir été déclarée avant son utilisation dans l'initialisation.
Explication : point de déclaration et comportement non défini
En C , le point de déclaration d'une variable se situe immédiatement après le déclarateur complet (le type et le nom de la variable) et avant l'initialiseur (le cas échéant). Ainsi, dans le code ci-dessus, x apparaît au signe égal, ce qui lui permet d'être utilisé sur le côté droit.
Cependant, il est important de noter qu'à moins que la variable ne soit initialisée avec une durée de stockage statique (par exemple, en dehors d'une fonction), le comportement n'est pas défini. En effet, le x qui apparaît avant l'initialisation a une valeur arbitraire.
La norme C 03 précise que pour les variables initialisées avec leur propre valeur (indéterminée), comme dans l'exemple de la question, le comportement n'est pas défini :
int x = x; // Example from the C++03 standard { int x = x; // Undefined behavior }
Implications pratiques
Bien que ce comportement puisse être surprenant, il est important d'éviter de l'utiliser dans le code de production. À moins que la variable ne soit déclarée avec une durée de stockage statique, le comportement non défini peut conduire à des résultats et des erreurs imprévisibles.
Cependant, comprendre ce comportement peut s'avérer utile pour comprendre des expressions complexes impliquant des variables nouvellement déclarées ou pour analyser du code avec une initialisation non conventionnelle. techniques.
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!