C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

code buggé mais valide ???

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
GOURUL Frédéric
Guest





PostPosted: Wed Jul 28, 2004 6:13 pm    Post subject: code buggé mais valide ??? Reply with quote



Bonjour à tous,

Après avoir passé un peu de temps à la recherche de ce bug, je m'interroge
sur le mutisme de mon compilateur.

std::string foo(std::string& s)
{
std::cout << s << endl;
return std::string("code buggé");
}

std::string r = foo(r);

Bien sur, le code étant légèrement plus subtile que ca, mais en gros c'était
ca... Evidemment ca ne peut pas marcher, on passe en paramètre de foo() une
reférence sur un objet encore non construit, puisque le résultat de foo est
justement le paramètre du constructeur de r...

Ce qui m'étonne, c'est qu'aucun des compilateurs avec lequels j'ai testé ce
code (VC++, gcc, HP-UX aCC) n'a emis la moindre erreur ou warning. Ce qui
m'étonne d'autant plus de la part de VC++ qui est légèrement paranoïaque
question warning a mon goût... Alors pourquoi ce silence ? Je n'ai pas
l'impression que le cas soit particulièrement complexe à détecter, cela
signifirait-il que bien que buggé, le code soit valide vis-à-vis de la norme
?

votre avis ?

Fred.


Back to top
Nico
Guest





PostPosted: Wed Jul 28, 2004 7:37 pm    Post subject: Re: code buggé mais valide ??? Reply with quote




"GOURUL Frédéric" <fgourul.nospam (AT) 9online (DOT) fr> a écrit dans le message de
news:ce8qbi$bpd$1 (AT) apollon (DOT) grec.isp.9tel.net...
Quote:
Bonjour à tous,

Après avoir passé un peu de temps à la recherche de ce bug, je m'interroge
sur le mutisme de mon compilateur.

std::string foo(std::string& s)
{
std::cout << s << endl;
return std::string("code buggé");
}

std::string r = foo(r);

Bien sur, le code étant légèrement plus subtile que ca, mais en gros
c'était
ca... Evidemment ca ne peut pas marcher, on passe en paramètre de foo()
une
reférence sur un objet encore non construit, puisque le résultat de foo
est
justement le paramètre du constructeur de r...


Pour moi ce n'est pas tout a fait ca :
foo n'est pas le paramètre du constructeur de r.
la ligne "std::string r = foo(r);" est plutot équivalente à "std::string r;
r = foo(r);"

Ce dont je ne suis pas sur, c'est si ta ligne a un comportement défini ou
non.



Back to top
GOURUL Frédéric
Guest





PostPosted: Wed Jul 28, 2004 9:11 pm    Post subject: Re: code buggé mais valide ??? Reply with quote




"Nico" <nvervell (AT) club-internet (DOT) fr> a écrit dans le message de
news:41080270$0$306$7a628cd7 (AT) news (DOT) club-internet.fr...
Quote:

Pour moi ce n'est pas tout a fait ca :
foo n'est pas le paramètre du constructeur de r.
la ligne "std::string r = foo(r);" est plutot équivalente à "std::string
r;
r = foo(r);"

Non, ici c'est bien le constructeur de std::string qui est appelé avec comme
paramètre le résultat de foo(). La notation est un peu trompeuse et lorsque
je l'ai écrit, j'ai pensé, sans y réfléchir, que c'était l'operateur
d'affectation qui était appelé, alors que ce n'est pas le cas...

Quote:
Ce dont je ne suis pas sur, c'est si ta ligne a un comportement défini ou
non.


pour moi, c'est bien un comportement indéfini. En tout cas, sur les trois
compilateurs testés et assure d'ailleurs un plantage assez rapide...



Back to top
Loïc Joly
Guest





PostPosted: Wed Jul 28, 2004 9:55 pm    Post subject: Re: code buggé mais valide ??? Reply with quote

GOURUL Frédéric wrote:

Quote:
Bonjour à tous,

Après avoir passé un peu de temps à la recherche de ce bug, je m'interroge
sur le mutisme de mon compilateur.

std::string foo(std::string& s)
{
std::cout << s << endl;
return std::string("code buggé");
}

std::string r = foo(r);

Le comportement est bien indéfini.

--
Loïc


Back to top
Horst Kraemer
Guest





PostPosted: Thu Jul 29, 2004 8:04 pm    Post subject: Re: code buggé mais valide ??? Reply with quote

"GOURUL Frédéric" <fgourul.nospam (AT) 9online (DOT) fr> wrote:

Quote:
Bonjour à tous,

Après avoir passé un peu de temps à la recherche de ce bug, je m'interroge
sur le mutisme de mon compilateur.

std::string foo(std::string& s)
{
std::cout << s << endl;
return std::string("code buggé");
}

std::string r = foo(r);

Bien sur, le code étant légèrement plus subtile que ca, mais en gros c'était
ca... Evidemment ca ne peut pas marcher, on passe en paramètre de foo() une
reférence sur un objet encore non construit, puisque le résultat de foo est
justement le paramètre du constructeur de r...

Ce qui m'étonne, c'est qu'aucun des compilateurs avec lequels j'ai testé ce
code (VC++, gcc, HP-UX aCC) n'a emis la moindre erreur ou warning. Ce qui
m'étonne d'autant plus de la part de VC++ qui est légèrement paranoïaque
question warning a mon goût... Alors pourquoi ce silence ? Je n'ai pas
l'impression que le cas soit particulièrement complexe à détecter, cela
signifirait-il que bien que buggé, le code soit valide vis-à-vis de la norme
?

Non. Le code n'est pas valide parce que son conportement est indéfini.

Mais la norme n'interdit pas au compilateur de compiler du code dont
la syntaxe est légale et dont le comportement est indéfini.

La norme est explicite: Le compilateur n'est pas obligé de découvrir
des erreurs sémantiques dans des cas où la norme dit "no diagnostic
required" ou bien "le comportement est indéfini". Il n'est donc obligé
que de découvrir des erreurs sémantiques que la norme marque
explicitement comme "diagnosable" - et ce n'est pas le cas ici.

--
Horst


Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.