for-Schleifenvariable innerhalb der Schleife neu definieren
Von: Sebastian Schuberth (sschuberth@gmail.com) [Profil]
Datum: 09.09.2009 23:58
Message-ID: <08e650ff-05ab-44c1-ab7d-d6adb5ba75f7@w36g2000yqm.googlegroups.com>
Newsgroup: de.comp.lang.c
Datum: 09.09.2009 23:58
Message-ID: <08e650ff-05ab-44c1-ab7d-d6adb5ba75f7@w36g2000yqm.googlegroups.com>
Newsgroup: de.comp.lang.c
Hallo,
ich bin vor kurzem über folgendes Scope-Problem gestolpert, was mir
beim Vergleich von GCC 4.4.0 und VS 2008 aufgefallen ist. Folgender
Code müsste IMHO (spätestens seit C99) ungültig sein:
int main()
{
for (int i=0;i<10;++i)
{
int i=20; // i wird neu definiert.
}
return 0;
}
Da AFAIK ab C99 der Scope einer for-Schleifenvariable sich auf die for-
Schleife beschränkt (also "i" nach der schließenden Klammer der for-
Schleife nicht mehr verfügbar ist), ist es quasi so, als würde das
erste "i" innerhalb der for-Schleife definiert werden, genau wie das
zweite "i", und da sie somit im selben Scope definiert wurden, sollte
der Code nicht kompilieren. In VS 2008 tut er das auch nicht ("error:
redefinition; multiple initialization"), in GCC 4.4.0 aber schon, und
zwar einwandfrei, selbst mit "-std=C99 -Wall -pedantic".
Ich habe außerdem auf die schnelle weder in VS 2008 einen Compiler-
Switch gefunden, um den Code zu akzeptieren, noch in GCC 4.4.0, es
nicht zu tun.
Was ist, nach neuestem Standard, hier das richtige Verhalten? Wie kann
ich die beiden Compiler dazu bringen, sich gleich (und
standardkonform) zu verhalten?
Komischerweise habe ich dazu keine Infos gefunden. Alle for-Scope
Beiträge, die ich bisher gefunden habe, beziehen sich auf die (Un)
gültigkeit der for-Schleifenvariable *nach* der Schleife.
Danke schonmal.
--
Sebastian Schuberth
[ Auf dieses Posting antworten ]Antworten
- Claus Reibenstein (10.09.2009 08:57)
- Thomas Koller (10.09.2009 09:48)
- Sebastian Schuberth (10.09.2009 11:14)
- Juergen Ilse (10.09.2009 23:35)
- Juergen Ilse (10.09.2009 23:22)
- Thomas Koller (11.09.2009 00:19)
- Sebastian Schuberth (10.09.2009 11:08)
- Sebastian Schuberth (10.09.2009 11:48)
- Claus Reibenstein (10.09.2009 14:17)
- Juergen Ilse (10.09.2009 23:47)
- MIchael Schumacher (10.09.2009 13:50)
- Gerald Breuer (10.09.2009 16:15)
