39 votes

Comment expliquer un comportement indéfini à tous les débutants?

Il y a une poignée de situations que la norme C++ attributs comme un comportement indéfini. Par exemple, si j'alloue avec new[], alors essayez de les gratuit avec delete (pas delete[]) c'est un comportement indéfini - tout peut arriver - cela pourrait fonctionner, il pourrait faire planter méchamment, il peut corrompre quelque chose dans le silence et la plante un temps de problème.

Il est si difficile d'expliquer ce que tout peut se passer de la partie pour les débutants. Ils commencent à "prouver" que "ça fonctionne" (parce qu'il travaille vraiment sur le C++ de mise en œuvre qu'ils utilisent), et de se demander ce que pourrait être le problème avec ce"? Quelle explication concise ce que je pourrais donner qui pourraient motiver à ne pas écrire un tel code?

51voto

Alex Neth Points 2005

Undefined signifie explicitement non fiable. Le logiciel devrait être fiable. Vous ne devriez pas avoir à dire grand chose d'autre.

Un étang gelé est un bon exemple de surface de marche non définie. Ce n'est pas parce que vous traversez une fois que vous devez ajouter le raccourci à votre itinéraire papier, surtout si vous planifiez les quatre saisons.

33voto

Péter Török Points 72981

Deux possibilités me viennent à l’esprit:

  1. Vous pouvez leur demander "juste parce que vous pouvez conduire sur l'autoroute dans le sens opposé à minuit et survivre, le feriez-vous régulièrement?"

  2. La solution la plus complexe pourrait être de mettre en place un compilateur / environnement d'exécution différent pour leur montrer comment il échoue de manière spectaculaire dans des circonstances différentes.

23voto

Ignacio Vazquez-Abrams Points 312628

"Félicitations, vous avez défini le comportement du compilateur pour cette opération. Je m'attends à ce que le rapport sur le comportement des 200 autres compilateurs existants dans le monde soit affiché sur mon bureau demain à 10 heures. Ne décevez pas. moi maintenant, ton avenir s'annonce prometteur! "

13voto

FredOverflow Points 88201

Citons simplement de la norme. Si ils ne peuvent pas accepter qu'ils ne sont pas les programmeurs en C++. Serait Chrétiens refuser la bible? ;-)

1.9 l'exécution du Programme

  1. La sémantique des descriptions dans la présente Norme Internationale définir un paramétrée de façon non déterministe machine abstraite. [...]

  2. Certains aspects et des opérations de la machine abstraite sont décrites dans la présente Norme Internationale en tant que définis par l'implémentation (par exemple, sizeof(int)). Ceux-ci constituent les paramètres de la machine abstraite. Chaque mise en œuvre doit comporter une documentation décrivant ses caractéristiques et des comportements dans ces domaines. [...]

  3. Certains autres aspects et des opérations de la machine abstraite sont décrites dans la présente Norme Internationale comme non spécifié (par exemple, l'ordre d'évaluation des arguments à une fonction). Si possible, la présente Norme Internationale définit un ensemble admissible de comportements. Elles définissent le non déterministe aspects de la machine abstraite. [...]

  4. Certaines autres opérations sont décrites dans la présente Norme Internationale comme non défini (par exemple, l'effet de déréférencement du pointeur null). [ Note: la présente Norme Internationale n'impose pas d'exigences sur le comportement des programmes qui contiennent un comportement indéfini. -la note de fin ]

Vous ne pouvez pas obtenir plus clair que cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X