Fabien LE LEZ <gramster@gramster.com> writes:
> On Wed, 27 Feb 2008 18:56:42 +0100, David Côme <davidcome@wanadoo.fr>:
>
> >int a; //(1)
>
> Jusque-là, pas de problème, même si l'utilité d'un tel code m'échappe.
>
> >cout<< a; // (2)
>
> C'est de toutes façons un comportement indéfini : dans le meilleur des
> cas, ça affichera un entier, sans qu'il soit possible d'en prévoir la
> valeur à l'avance.
>
> Il me semble que selon la norme, c'est un comportement indéfini tout
> court (On ne peut pas du tout prévoir le comportement du code) ;
J'ai pas vérifié, mais c'est ce que je pense. En particulier, ça peut être
une valeur déclanchant une exception (trois cas plausibles: la
représentation de ce qui serait -0 sur une machine en complément à 1 ou
grandeur et signe qui n'admet pas de -0; mauvais tags sur une machine où
les valeurs ont un tag; il y a eu une machine n'ayant que des nombres en
virgule flottante, mais où certaines opérations trappaient si une donnée
n'était pas entière).
> toutefois, en pratique, je m'attendrais à ce qu'un entier quelconque soit
> effectivement affiché.
Sur les machines courantes, c'est le comportement le plus vraissemblable.
> Et il y a même de bonnes chances pour que ce soit le même à chaque
> exécution, tant qu'on ne recompile pas.
Ca dépend de ce que tu appelles exécution. Ca ne m'étonnerait pas trop que
ceci
void f(int i) { int k = i; }
void g() { int a; std::cout << a << std::endl; }
int main() {
f(42);
g();
f(36);
g();
}
affiche 42 puis 36.
Et ca dépend aussi du système, tous ne remettent pas toute la mémoire à 0
entre processus (c'est certainement une mauvaise idée de ne pas le faire
sur des machines à usage général).
A+
--
Jean-Marc
FAQ de fclc++:
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF:
http://www.ifrance.com/jlecomte/c++/...ite/index.html
Site de usenet-fr:
http://www.usenet-fr.news.eu.org