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 

Redeclaration de variable

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Remi Moyen
Guest





PostPosted: Fri Jan 21, 2005 10:43 am    Post subject: Redeclaration de variable Reply with quote



Bonjour,

J'ai découvert par hasard (et en me plantant, forcément...) qu'il était
légal, au moins avec gcc (3.3.5), de redéfinir dans un sous-bloc une
variable déjà définie dans un bloc parent.

Par exemple, le code suivant tourne parfaitement :

int i = 0 ;
{
int i = 42 ;
cout << i << endl ;
}
cout << i << endl ;

Et il affiche 42, puis 0.

Bon, je suppose qu'il y a une raison, mais en fait ce qui m'intéresse,
c'est surtout comment faire pour empêcher ce comportement ? Parce que pour
moi, c'est surtout une source d'erreur, lorsque je réutilise par mégarde
un nom déjà utilisé avant (code tapé rapidement, copier-coller,
toussa...).

Comme y'a des options pour tout dans gcc, je me dis qu'il y en a peut-être
une spécialement faite pour vérifier ce genre de choses ? J'ai regardé (un
peu rapidement, j'avoue...) le man de gcc/g++, et je n'ai rien vu à ce
sujet.

Merci d'avance !

PS : si c'est trop hors-sujet de causer de trucs spécifiques à gcc ici,
merci de rediriger vers le bon forum (fco.unix ?).
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."
Back to top
Anthony Fleury
Guest





PostPosted: Fri Jan 21, 2005 11:09 am    Post subject: Re: Redeclaration de variable Reply with quote



Remi Moyen wrote:

Quote:
Bonjour,

Bonjour,

Quote:
J'ai découvert par hasard (et en me plantant, forcément...) qu'il était
légal, au moins avec gcc (3.3.5), de redéfinir dans un sous-bloc une
variable déjà définie dans un bloc parent.

Légal avec tout compilateur C++ conforme tout du moins. C'est autorisé par
la norme.

Quote:
Par exemple, le code suivant tourne parfaitement :

int i = 0 ;
{
int i = 42 ;
cout << i << endl ;
}
cout << i << endl ;

Et il affiche 42, puis 0.

Normal.

Quote:
Bon, je suppose qu'il y a une raison, mais en fait ce qui m'intéresse,
c'est surtout comment faire pour empêcher ce comportement ?

Je ne vois pas trop, vu que c'est légal. Ce n'est pas un comportement
bizarre pour le C++ qui considère que le code est vu dans "l'espace de
nommage" du bloc en question (ptite question, c'est bien légal de parler de
namespace dans ce cas ?). Donc il prend cette variable à la place de celle
du dessus. Certaines IDE doivent bien pouvoir rendre plus visible ce genre
d'erreur (avec le masquage de blocs ou autre...).

Quote:
Comme y'a des options pour tout dans gcc, je me dis qu'il y en a peut-être
une spécialement faite pour vérifier ce genre de choses ? J'ai regardé (un
peu rapidement, j'avoue...) le man de gcc/g++, et je n'ai rien vu à ce
sujet.

Je ne vois pas trop, mais des gens plus calés que moi avec g++ pourront
peut-être répondre.

--
Anthony Fleury
"Il faut mieux avoir un dix à sa composition qu'un con à sa disposition."

Back to top
Matthieu Moy
Guest





PostPosted: Fri Jan 21, 2005 11:36 am    Post subject: Re: Redeclaration de variable Reply with quote



Anthony Fleury <fleury_anthony (AT) _hotmail_ (DOT) com> writes:

Quote:
Légal avec tout compilateur C++ conforme tout du moins. C'est autorisé par
la norme.

Et au passage, il y a ce genre de chose dans a peu près tous les
langages que je connais.

--
Matthieu

Back to top
Jean-Sebastien Mouret
Guest





PostPosted: Fri Jan 21, 2005 11:37 am    Post subject: Re: Redeclaration de variable Reply with quote

Anthony Fleury <fleury_anthony (AT) _hotmail_ (DOT) com> writes:

Quote:
Remi Moyen wrote:

Bonjour,

Bonjour,

J'ai découvert par hasard (et en me plantant, forcément...) qu'il était
légal, au moins avec gcc (3.3.5), de redéfinir dans un sous-bloc une
variable déjà définie dans un bloc parent.

[...]

Comme y'a des options pour tout dans gcc, je me dis qu'il y en a peut-être
une spécialement faite pour vérifier ce genre de choses ? J'ai regardé (un
peu rapidement, j'avoue...) le man de gcc/g++, et je n'ai rien vu à ce
sujet.


-Wshadow


--
js

Back to top
Michel Michaud
Guest





PostPosted: Fri Jan 21, 2005 6:22 pm    Post subject: Re: Redeclaration de variable Reply with quote

Dans le message [email]vpqacr3auad.fsf (AT) ecrins (DOT) imag.fr[/email],
Matthieu Moy <MatthieuNOSPAM.Moy (AT) imag (DOT) fr.invalid> a écrit :
Quote:
Anthony Fleury <fleury_anthony (AT) _hotmail_ (DOT) com> writes:

Légal avec tout compilateur C++ conforme tout du moins. C'est
autorisé par la norme.

Et au passage, il y a ce genre de chose dans a peu près tous les
langages que je connais.

C# étant l'exception dans la liste des langages semblables à C...

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Back to top
Marc Boyer
Guest





PostPosted: Mon Jan 24, 2005 2:25 pm    Post subject: Re: Redeclaration de variable Reply with quote

Remi Moyen wrote:
Quote:
Bonjour,

J'ai découvert par hasard (et en me plantant, forcément...) qu'il était
légal, au moins avec gcc (3.3.5), de redéfinir dans un sous-bloc une
variable déjà définie dans un bloc parent.

Par exemple, le code suivant tourne parfaitement :

int i = 0 ;
{
int i = 42 ;
cout << i << endl ;
}
cout << i << endl ;

Et il affiche 42, puis 0.

Bon, je suppose qu'il y a une raison,

Oui, la notion de localité des identifiants, et tous les
languages avec déclaration explicite de variable que je
connais font de même.

Quote:
mais en fait ce qui m'intéresse,
c'est surtout comment faire pour empêcher ce comportement ? Parce que pour
moi, c'est surtout une source d'erreur, lorsque je réutilise par mégarde
un nom déjà utilisé avant (code tapé rapidement, copier-coller,
toussa...).

Ben, qu'un langage ne soit pas adapté au copier-coller
brutal me semble plutôt une bonne chose.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Back to top
Remi Moyen
Guest





PostPosted: Tue Jan 25, 2005 9:49 am    Post subject: Re: Redeclaration de variable Reply with quote

On Fri, 21 Jan 2005, Jean-Sebastien Mouret wrote:

Quote:
J'ai découvert par hasard (et en me plantant, forcément...) qu'il était
légal, au moins avec gcc (3.3.5), de redéfinir dans un sous-bloc une
variable déjà définie dans un bloc parent.

[...]

Comme y'a des options pour tout dans gcc, je me dis qu'il y en a peut-être
une spécialement faite pour vérifier ce genre de choses ? J'ai regardé (un
peu rapidement, j'avoue...) le man de gcc/g++, et je n'ai rien vu à ce
sujet.


-Wshadow

Nickel. Merci pour ta réponse, c'est exactement ce qu'il me fallait. Ça me
permettra de contrôler mon code plus aisément.
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."

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.