je connais le probleme de declarer des choses du genre:
for (int i....)
Dans ce cas (sauf erreur) VC++6.0 declare i dans le scope du dessus.
VC++.NET lui declare i dans le scope du for...
Mais si je fais ca:
for (int i=0;i<1;++i);
for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une
erreur sur le 2e for)
gcc lui me sort une erreur sur la premiere declaration du i...
On m'aurait menti? J'avoue etre completement perdu la.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Arnaud Meurgues
korchkidu wrote:
Dans ce cas (sauf erreur) VC++6.0 declare i dans le scope du dessus. VC++.NET lui declare i dans le scope du for... Mais si je fais ca:
for (int i=0;i<1;++i); for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une erreur sur le 2e for)
Ah oui, c'est bizarre. Surtout qu'il accepte aussi sans broncher
for (int i=0;i<1;++i); for (int i=0;i<1;++i);
Mais en regardant les options du projet, j'ai trouvé d'où ça venait. Ils ont dû faire une extension afin de ne pas casser le code msvc6. On peut demander le comportement standard dans :
Properties -> C/C++ -> Language Force Conformance In For Loop Scope -> Yes (/Zc:forScope)
Ce qui est bizarre, c'est qu'avec leur extension, on peut écrire :
for (int i=0;i<1;++i); for (int i=0;i<1;++i); i = 3;
Ça veut dire qu'il accepte que le premier "int i" défini une variable i dans le scope englobant, mais qu'on peut la redéfinir dans un autre for...
On m'aurait menti? J'avoue etre completement perdu la.
Le devoir de compatibilité oblige parfois à des gymnastiques insensées.
-- Arnaud (Supprimez les geneurs pour me répondre)
korchkidu wrote:
Dans ce cas (sauf erreur) VC++6.0 declare i dans le scope du dessus.
VC++.NET lui declare i dans le scope du for...
Mais si je fais ca:
for (int i=0;i<1;++i);
for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une
erreur sur le 2e for)
Ah oui, c'est bizarre. Surtout qu'il accepte aussi sans broncher
for (int i=0;i<1;++i);
for (int i=0;i<1;++i);
Mais en regardant les options du projet, j'ai trouvé d'où ça venait. Ils
ont dû faire une extension afin de ne pas casser le code msvc6. On peut
demander le comportement standard dans :
Properties -> C/C++ -> Language
Force Conformance In For Loop Scope
-> Yes (/Zc:forScope)
Ce qui est bizarre, c'est qu'avec leur extension, on peut écrire :
for (int i=0;i<1;++i);
for (int i=0;i<1;++i);
i = 3;
Ça veut dire qu'il accepte que le premier "int i" défini une variable i
dans le scope englobant, mais qu'on peut la redéfinir dans un autre for...
On m'aurait menti? J'avoue etre completement perdu la.
Le devoir de compatibilité oblige parfois à des gymnastiques insensées.
--
Arnaud
(Supprimez les geneurs pour me répondre)
Dans ce cas (sauf erreur) VC++6.0 declare i dans le scope du dessus. VC++.NET lui declare i dans le scope du for... Mais si je fais ca:
for (int i=0;i<1;++i); for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une erreur sur le 2e for)
Ah oui, c'est bizarre. Surtout qu'il accepte aussi sans broncher
for (int i=0;i<1;++i); for (int i=0;i<1;++i);
Mais en regardant les options du projet, j'ai trouvé d'où ça venait. Ils ont dû faire une extension afin de ne pas casser le code msvc6. On peut demander le comportement standard dans :
Properties -> C/C++ -> Language Force Conformance In For Loop Scope -> Yes (/Zc:forScope)
Ce qui est bizarre, c'est qu'avec leur extension, on peut écrire :
for (int i=0;i<1;++i); for (int i=0;i<1;++i); i = 3;
Ça veut dire qu'il accepte que le premier "int i" défini une variable i dans le scope englobant, mais qu'on peut la redéfinir dans un autre for...
On m'aurait menti? J'avoue etre completement perdu la.
Le devoir de compatibilité oblige parfois à des gymnastiques insensées.
-- Arnaud (Supprimez les geneurs pour me répondre)
korchkidu
dark poulpo wrote:
non pas d'erreur, apres un for on attend un bloc ou une instruction, toutes les variables declarées dans un bloc superieur sont utilisables dans un bloc inferieur. Il y a un ";" apres le for. Le i n'est donc pas declare pour le 2e for.
Exemple:
for (int i=0;i<1;++i) i=3;
compile sans probleme.
Par contre
for (int i=0;i<1;++i); i=3;
me sort une erreur sur le i=3 (normal, il n'est plus declare).
Par contre, sans utiliser le "Force Conformance In For Loop Scope" (donc i est declare dans le scope au dessus du for, ca compile sans probleme.
K.
dark poulpo wrote:
non pas d'erreur, apres un for on attend un bloc ou une instruction, toutes
les variables declarées dans un bloc superieur sont utilisables dans un bloc
inferieur.
Il y a un ";" apres le for. Le i n'est donc pas declare pour le 2e for.
Exemple:
for (int i=0;i<1;++i)
i=3;
compile sans probleme.
Par contre
for (int i=0;i<1;++i);
i=3;
me sort une erreur sur le i=3 (normal, il n'est plus declare).
Par contre, sans utiliser le "Force Conformance In For Loop Scope" (donc
i est declare dans le scope au dessus du for, ca compile sans probleme.
non pas d'erreur, apres un for on attend un bloc ou une instruction, toutes les variables declarées dans un bloc superieur sont utilisables dans un bloc inferieur. Il y a un ";" apres le for. Le i n'est donc pas declare pour le 2e for.
Exemple:
for (int i=0;i<1;++i) i=3;
compile sans probleme.
Par contre
for (int i=0;i<1;++i); i=3;
me sort une erreur sur le i=3 (normal, il n'est plus declare).
Par contre, sans utiliser le "Force Conformance In For Loop Scope" (donc i est declare dans le scope au dessus du for, ca compile sans probleme.
K.
dark poulpo
"Arnaud Meurgues" a écrit dans le message de news:41a5d61e$0$17075$
korchkidu wrote:
Dans ce cas (sauf erreur) VC++6.0 declare i dans le scope du dessus. VC++.NET lui declare i dans le scope du for... Mais si je fais ca:
for (int i=0;i<1;++i); for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une erreur sur le 2e for)
non pas d'erreur, apres un for on attend un bloc ou une instruction, toutes les variables declarées dans un bloc superieur sont utilisables dans un bloc inferieur.
Ah oui, c'est bizarre. Surtout qu'il accepte aussi sans broncher
for (int i=0;i<1;++i); for (int i=0;i<1;++i);
Mais en regardant les options du projet, j'ai trouvé d'où ça venait. Ils ont dû faire une extension afin de ne pas casser le code msvc6. On peut demander le comportement standard dans :
Properties -> C/C++ -> Language Force Conformance In For Loop Scope -> Yes (/Zc:forScope)
Ce qui est bizarre, c'est qu'avec leur extension, on peut écrire :
for (int i=0;i<1;++i); for (int i=0;i<1;++i); i = 3;
tu nas jamais fais gaffe que part exemple on pouvait declarer une variable golbale i et redeclarer cette meme variable i dans une procedure ou fonction, je pense que c la meme regle ici.
"Arnaud Meurgues" <arnaud@meurgues.non.fr.invalid> a écrit dans le message
de news:41a5d61e$0$17075$626a14ce@news.free.fr...
korchkidu wrote:
Dans ce cas (sauf erreur) VC++6.0 declare i dans le scope du dessus.
VC++.NET lui declare i dans le scope du for...
Mais si je fais ca:
for (int i=0;i<1;++i);
for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une
erreur sur le 2e for)
non pas d'erreur, apres un for on attend un bloc ou une instruction, toutes
les variables declarées dans un bloc superieur sont utilisables dans un bloc
inferieur.
Ah oui, c'est bizarre. Surtout qu'il accepte aussi sans broncher
for (int i=0;i<1;++i);
for (int i=0;i<1;++i);
Mais en regardant les options du projet, j'ai trouvé d'où ça venait. Ils
ont dû faire une extension afin de ne pas casser le code msvc6. On peut
demander le comportement standard dans :
Properties -> C/C++ -> Language
Force Conformance In For Loop Scope
-> Yes (/Zc:forScope)
Ce qui est bizarre, c'est qu'avec leur extension, on peut écrire :
for (int i=0;i<1;++i);
for (int i=0;i<1;++i);
i = 3;
tu nas jamais fais gaffe que part exemple on pouvait declarer une variable
golbale i et redeclarer cette meme variable i dans une procedure ou
fonction, je pense que c la meme regle ici.
"Arnaud Meurgues" a écrit dans le message de news:41a5d61e$0$17075$
korchkidu wrote:
Dans ce cas (sauf erreur) VC++6.0 declare i dans le scope du dessus. VC++.NET lui declare i dans le scope du for... Mais si je fais ca:
for (int i=0;i<1;++i); for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une erreur sur le 2e for)
non pas d'erreur, apres un for on attend un bloc ou une instruction, toutes les variables declarées dans un bloc superieur sont utilisables dans un bloc inferieur.
Ah oui, c'est bizarre. Surtout qu'il accepte aussi sans broncher
for (int i=0;i<1;++i); for (int i=0;i<1;++i);
Mais en regardant les options du projet, j'ai trouvé d'où ça venait. Ils ont dû faire une extension afin de ne pas casser le code msvc6. On peut demander le comportement standard dans :
Properties -> C/C++ -> Language Force Conformance In For Loop Scope -> Yes (/Zc:forScope)
Ce qui est bizarre, c'est qu'avec leur extension, on peut écrire :
for (int i=0;i<1;++i); for (int i=0;i<1;++i); i = 3;
tu nas jamais fais gaffe que part exemple on pouvait declarer une variable golbale i et redeclarer cette meme variable i dans une procedure ou fonction, je pense que c la meme regle ici.
Andre Heinen
On Thu, 25 Nov 2004 15:12:31 +0100, "dark poulpo" wrote:
for (int i=0;i<1;++i); for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une erreur sur le 2e for)
non pas d'erreur, apres un for on attend un bloc ou une instruction,
Il y en a une: le point-virgule est l'instruction vide. Le for du dessous n'est donc pas dans la portée de celui du dessus.
-- Andre Heinen My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
On Thu, 25 Nov 2004 15:12:31 +0100, "dark poulpo" <qsdqd@sss.ss>
wrote:
for (int i=0;i<1;++i);
for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une
erreur sur le 2e for)
non pas d'erreur, apres un for on attend un bloc ou une instruction,
Il y en a une: le point-virgule est l'instruction vide. Le for
du dessous n'est donc pas dans la portée de celui du dessus.
--
Andre Heinen
My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
On Thu, 25 Nov 2004 15:12:31 +0100, "dark poulpo" wrote:
for (int i=0;i<1;++i); for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une erreur sur le 2e for)
non pas d'erreur, apres un for on attend un bloc ou une instruction,
Il y en a une: le point-virgule est l'instruction vide. Le for du dessous n'est donc pas dans la portée de celui du dessus.
-- Andre Heinen My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
Arnaud Meurgues
dark poulpo wrote:
for (int i=0;i<1;++i); for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une erreur sur le 2e for) non pas d'erreur, apres un for on attend un bloc ou une instruction, toutes
les variables declarées dans un bloc superieur sont utilisables dans un bloc inferieur.
Tu as dû rater les ";" en fin de for.
Ce qui est bizarre, c'est qu'avec leur extension, on peut écrire :
for (int i=0;i<1;++i); for (int i=0;i<1;++i); i = 3;
tu nas jamais fais gaffe que part exemple on pouvait declarer une variable golbale i et redeclarer cette meme variable i dans une procedure ou fonction, je pense que c la meme regle ici.
Ben pas vraiment. Si i est déclaré dans le scope englobant, for (int i=0;i<1;++i); est équivalent à int i; for (int i=0;i<1;++i);
Ceci répété deux fois est une redéfinition de i qui n'est pas autorisée.
-- Arnaud (Supprimez les geneurs pour me répondre)
dark poulpo wrote:
for (int i=0;i<1;++i);
for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une
erreur sur le 2e for)
non pas d'erreur, apres un for on attend un bloc ou une instruction, toutes
les variables declarées dans un bloc superieur sont utilisables dans un bloc
inferieur.
Tu as dû rater les ";" en fin de for.
Ce qui est bizarre, c'est qu'avec leur extension, on peut écrire :
for (int i=0;i<1;++i);
for (int i=0;i<1;++i);
i = 3;
tu nas jamais fais gaffe que part exemple on pouvait declarer une variable
golbale i et redeclarer cette meme variable i dans une procedure ou
fonction, je pense que c la meme regle ici.
Ben pas vraiment. Si i est déclaré dans le scope englobant,
for (int i=0;i<1;++i);
est équivalent à
int i;
for (int i=0;i<1;++i);
Ceci répété deux fois est une redéfinition de i qui n'est pas autorisée.
--
Arnaud
(Supprimez les geneurs pour me répondre)
VC++.NET compile sans warning. (alors que je m'attends a avoir une erreur sur le 2e for) non pas d'erreur, apres un for on attend un bloc ou une instruction, toutes
les variables declarées dans un bloc superieur sont utilisables dans un bloc inferieur.
Tu as dû rater les ";" en fin de for.
Ce qui est bizarre, c'est qu'avec leur extension, on peut écrire :
for (int i=0;i<1;++i); for (int i=0;i<1;++i); i = 3;
tu nas jamais fais gaffe que part exemple on pouvait declarer une variable golbale i et redeclarer cette meme variable i dans une procedure ou fonction, je pense que c la meme regle ici.
Ben pas vraiment. Si i est déclaré dans le scope englobant, for (int i=0;i<1;++i); est équivalent à int i; for (int i=0;i<1;++i);
Ceci répété deux fois est une redéfinition de i qui n'est pas autorisée.
-- Arnaud (Supprimez les geneurs pour me répondre)
dark poulpo
"Andre Heinen" a écrit dans le message de news:
On Thu, 25 Nov 2004 15:12:31 +0100, "dark poulpo" wrote:
for (int i=0;i<1;++i); for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une erreur sur le 2e for)
non pas d'erreur, apres un for on attend un bloc ou une instruction,
Il y en a une: le point-virgule est l'instruction vide. Le for du dessous n'est donc pas dans la portée de celui du dessus.
autant pour moi, je lavais pas vu!!!
"Andre Heinen" <nospam@nospam.invalid> a écrit dans le message de
news:k0qbq0pc8cn0q1bu1va0cec3c917fpm7d1@4ax.com...
On Thu, 25 Nov 2004 15:12:31 +0100, "dark poulpo" <qsdqd@sss.ss>
wrote:
for (int i=0;i<1;++i);
for (i=0;i<1;++i);
VC++.NET compile sans warning. (alors que je m'attends a avoir une
erreur sur le 2e for)
non pas d'erreur, apres un for on attend un bloc ou une instruction,
Il y en a une: le point-virgule est l'instruction vide. Le for
du dessous n'est donc pas dans la portée de celui du dessus.