 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Remi Moyen Guest
|
Posted: Fri Jan 21, 2005 10:43 am Post subject: Redeclaration de variable |
|
|
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
|
Posted: Fri Jan 21, 2005 11:09 am Post subject: Re: Redeclaration de variable |
|
|
Remi Moyen wrote:
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
|
Posted: Fri Jan 21, 2005 11:36 am Post subject: Re: Redeclaration de variable |
|
|
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
|
Posted: Fri Jan 21, 2005 11:37 am Post subject: Re: Redeclaration de variable |
|
|
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
|
Posted: Fri Jan 21, 2005 6:22 pm Post subject: Re: Redeclaration de variable |
|
|
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
|
Posted: Mon Jan 24, 2005 2:25 pm Post subject: Re: Redeclaration de variable |
|
|
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
|
Posted: Tue Jan 25, 2005 9:49 am Post subject: Re: Redeclaration de variable |
|
|
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 |
|
 |
|
|
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
|
|