Question

J'ai cette question, à laquelle j'ai pensé plus tôt, mais pensé qu'il n'est pas trivial pour répondre

int x = x + 1;
int main() {
  return x;
}

Ma question est de savoir si le comportement du programme est défini ou indéfini si c'est valable à tous.Si elle est définie, est la valeur de x connu dans main?

Était-ce utile?

La solution

Je suis sûr que c'est défini, et x doit avoir la valeur 1.§3.6.2/1 dit:"Les objets statiques durée de stockage (3.7.1) doit être initialisé à zéro (8.5) avant toute autre initialisation a lieu."

Après, je pense que c'est tout assez simple.

Autres conseils

Ma question est de savoir si le comportement du programme est défini ou indéfini si c'est valable à tous.Si elle est définie, est la valeur de x est connue dans la main?

Ce code n'est certainement pas propre, mais pour moi, il devrait fonctionner de manière prévisible.

int x met la variable dans le segment de données est définie à zéro au début du programme.Avant main(), initialiseurs statiques sont appelés.Pour x qui est le code x = x + 1. x = 0 + 1 = 1.Ainsi, le main() serait de retour 1.

Le code serait certainement travailler de manière imprévisible si x est une variable locale, alloué sur la pile.État de la pile, à la différence du segment de données, est à peu près garanti pour contenir undefined ordures.

Le 'x' dans la variable stockée dans le .sev, qui est rempli avec des 0 lorsque vous chargez le programme.Par conséquent, la valeur de 'x' est de 0 lorsque le programme est chargé en mémoire.

Alors avant d'principal est appelé, "x = x + 1" est exécuté.

Je ne sais pas si c'est valable ou pas, mais le comportement n'est pas défini.

Avant l'appel principal x doit être initialisé à 0 par conséquent, sa valeur doit être 1 un vous entrez principal, et vous renverra 1.C'est un comportement défini.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top