Thread View: de.comp.lang.c++
11 messages
11 total messages
Started by Volker Wendt
Sat, 16 Dec 1995 19:57
g++-2.7: for(int i=... 'i' undeclared ???
Author: Volker Wendt
Date: Sat, 16 Dec 1995 19:57
Date: Sat, 16 Dec 1995 19:57
23 lines
1230 bytes
1230 bytes
Hallo,
Beim compilieren einiger C++-Programme mit dem neuen g++ 2.7.0 ist
mir mehrmals folgender Fehler begegnet, der beim compilieren der
gleichen Programme mit aelteren Versionen von g++ nie aufgetreten ist.
Zum Beispiel:
foo()
{
for(int i=0;i<100;i++)
{
/* Benutzung der Variablen 'i' */
}
/* 'i' ist nicht mehr deklariert, die Funktion will aber weiterhin
die Variable 'i' (bis zum Ende der Funktion 'foo') benutzen.
Der Compiler bricht ab, mit der Fehlermeldung "'i' undeclared" */
}
Weiss irgend jemand, mit welchem Compilerschalter man fuer eine fehler-
freie Compilierung sorgen kann? (In der Anleitung 'Using and Porting GNU CC'
konnte ich keine Informationen dazu finden.)
Gruss Volker
Re: g++-2.7: for(int i=... 'i' undeclared ???
Author: Enno Sandner
Date: Sun, 17 Dec 1995 08:31
Date: Sun, 17 Dec 1995 08:31
28 lines
1714 bytes
1714 bytes
In article <DJp3FF.3sK@hermes.hrz.uni-bielefeld.de> vwendt@dave.hrz.uni-bielefeld.de ( Volker Wendt) writes:
Beim compilieren einiger C++-Programme mit dem neuen g++ 2.7.0 ist
mir mehrmals folgender Fehler begegnet, der beim compilieren der
gleichen Programme mit aelteren Versionen von g++ nie aufgetreten ist.
Zum Beispiel:
foo()
{
for(int i=0;i<100;i++)
{
/* Benutzung der Variablen 'i' */
}
/* 'i' ist nicht mehr deklariert, die Funktion will aber weiterhin
die Variable 'i' (bis zum Ende der Funktion 'foo') benutzen.
Der Compiler bricht ab, mit der Fehlermeldung "'i' undeclared" */
}
Weiss irgend jemand, mit welchem Compilerschalter man fuer eine fehler-
freie Compilierung sorgen kann? (In der Anleitung 'Using and Porting GNU CC'
konnte ich keine Informationen dazu finden.)
Die Option '-fno-for-scope' ermoeglicht es den Code mit g++ 2.7.x
zu uebersetzen. Generell wuerde ich aber eine 'Portierung' des
veralteten Codes in Betracht ziehen, da nicht klar ist, wie lange
diese Option noch unterstuetzt wird.
Enno
Re: g++-2.7: for(int i=... 'i' undeclared ???
Author: Ortwin Gasper
Date: Sun, 17 Dec 1995 10:24
Date: Sun, 17 Dec 1995 10:24
23 lines
1384 bytes
1384 bytes
> foo()
> {
> for(int i;i<100;i++)
> {
> /* Benutzung der Variablen 'i' */
> }
> /* 'i' ist nicht mehr deklariert, die Funktion will aber weiterhin
> die Variable 'i' (bis zum Ende der Funktion 'foo') benutzen.
> Der Compiler bricht ab, mit der Fehlermeldung "'i' undeclared" */
> }
>
> Weiss irgend jemand, mit welchem Compilerschalter man fuer eine fehler-
> freie Compilierung sorgen kann? (In der Anleitung 'Using and Porting GNU CC'
> konnte ich keine Informationen dazu finden.)
Auch wenn es blöde klingt, ich würde das Programm - soviel Mühe das auch
macht - umschreiben. Dadurch erhälst Du Dir Deine Portierbarkeit auf
andere Compiler, die diesen Fehler auch nicht mehr durchgehen lassen.
(Ausnahme z.B. Borland C++ 2.0 für OS/2).
MfG
Ortwin
## CrossPoint v3.1 R ##
Re: g++-2.7: for(int i=... 'i' undeclared ???
Author: Ullrich von Bassewitz
Date: Sun, 17 Dec 1995 11:51
Date: Sun, 17 Dec 1995 11:51
16 lines
824 bytes
824 bytes
Volker Wendt (vwendt@dave.hrz.uni-bielefeld.de) wrote:
> Weiss irgend jemand, mit welchem Compilerschalter man fuer eine fehler-
> freie Compilierung sorgen kann? (In der Anleitung 'Using and Porting GNU CC'
> konnte ich keine Informationen dazu finden.)
-fno-for-scope
Gruss
Uz
--
Ullrich von Bassewitz uz@ibb.schwaben.com
Re: g++-2.7: for(int i=... 'i' undeclared ???
Author: Ullrich von Bassewitz
Date: Sun, 17 Dec 1995 16:59
Date: Sun, 17 Dec 1995 16:59
20 lines
1212 bytes
1212 bytes
Enno Sandner (enno@inferenzsysteme.informatik.th-darmstadt.de) wrote:
> Die Option '-fno-for-scope' ermoeglicht es den Code mit g++ 2.7.x
> zu uebersetzen. Generell wuerde ich aber eine 'Portierung' des
> veralteten Codes in Betracht ziehen, da nicht klar ist, wie lange
> diese Option noch unterstuetzt wird.
Soweit ich gehoert habe, uebersetzt g++ 2.7.2 for Schleifen wieder
"richtig" (da wissen welche anscheinend nicht, was sie wollen).
Am besten, Du wartest noch etwas mit dem "portieren", die Compiler, die
_nicht_ dieses Verhalten haben sind derzeit noch stark in der Mehrzahl.
Gruss
Uz
--
Ullrich von Bassewitz uz@ibb.schwaben.com
Re: g++-2.7: for(int i=... 'i' undeclared ???
Author: Ullrich von Bassewitz
Date: Sun, 17 Dec 1995 23:59
Date: Sun, 17 Dec 1995 23:59
30 lines
1907 bytes
1907 bytes
Ortwin Gasper (gasper@viking.ruhr.com) wrote:
> Auch wenn es blöde klingt, ich würde das Programm - soviel Mühe das auch
> macht - umschreiben. Dadurch erhälst Du Dir Deine Portierbarkeit auf
> andere Compiler, die diesen Fehler auch nicht mehr durchgehen lassen.
> (Ausnahme z.B. Borland C++ 2.0 für OS/2).
Aehem. Die Aenderung des Scopes einer im Kopf der for-Schleife deklarierten
Variable ist ein Feature des "proposed ANSI C++" Standards. Dieser Standard
ist _noch_nicht_abgesegnet_! D.h. alle Compiler die das jetzt bereits
implementieren (ich kenne nur g++) verhalten sich _nicht_ entsprechend dem
aktuellen Standard (ARM).
Es handelt sich also keinesfalls um einen Fehler, sondern um eine korrekte
Implementation des aktuellen Standards.
Natuerlich muessen Quellen angepasst werden. Ob das aber jetzt schon
sinnvoll ist, ist die Frage. Ich bin dazu uebergegangen, im Zweifelsfall die
Variablendeklaration aus dem Schleifenkopf rauszuziehen, das hat den
Vorteil, dass es kompatibel sowohl zum jetzigen, als auch zum kommenden
Standard ist. Das ist (was diesen Punkt angeht) der einzige Weg, in den
naechsten 1-3 Jahren Code zu schreiben, der sich mit mehr als einem Compiler
uebersetzen laesst.
Gruss
Uz
--
Ullrich von Bassewitz uz@ibb.schwaben.com
Re: g++-2.7: for(int i=... 'i' undeclared ???
Author: Enno Sandner
Date: Mon, 18 Dec 1995 11:18
Date: Mon, 18 Dec 1995 11:18
46 lines
1998 bytes
1998 bytes
Ullrich von Bassewitz wrote:
>
> Enno Sandner (enno@inferenzsysteme.informatik.th-darmstadt.de) wrote:
> > Die Option '-fno-for-scope' ermoeglicht es den Code mit g++ 2.7.x
> > zu uebersetzen. Generell wuerde ich aber eine 'Portierung' des
> > veralteten Codes in Betracht ziehen, da nicht klar ist, wie lange
> > diese Option noch unterstuetzt wird.
>
> Soweit ich gehoert habe, uebersetzt g++ 2.7.2 for Schleifen wieder
> "richtig" (da wissen welche anscheinend nicht, was sie wollen).
>
> Am besten, Du wartest noch etwas mit dem "portieren", die Compiler, die
> _nicht_ dieses Verhalten haben sind derzeit noch stark in der Mehrzahl.
>
Stimmt, g++ 2.7.2 scheint automatisch auf die aeltere Scoping-Rule
umzuschalten, gibt allerdings eine Warnung aus. Bsp:
t.C:
int main()
{
for (int i=0; i<10; i++);
i=4711;
return 0;
}
>g++ t.C
>t.C: In function `int main()':
>t.C:4: warning: name lookup of `i' changed for new ANSI `for' scoping
>t.C:3: warning: using obsolete binding at `i'
Insgesamt faehrt man wohl am besten, wenn man in solchen Faellen
die Schleifenvariable vor der Schleife deklariert, also statt dessen
int main()
{
int i;
for (i=0; i<10; i++);
i=4711;
return 0;
}
schreibt.
Gruss
Enno
Re: g++-2.7: for(int i=... 'i' undeclared ???
Author: Dietmar Kuehl
Date: Mon, 18 Dec 1995 15:05
Date: Mon, 18 Dec 1995 15:05
25 lines
1784 bytes
1784 bytes
Hi, Ullrich von Bassewitz (uz@wuschel.ibb.schwaben.com) wrote: : Enno Sandner (enno@inferenzsysteme.informatik.th-darmstadt.de) wrote: : > Die Option '-fno-for-scope' ermoeglicht es den Code mit g++ 2.7.x : > zu uebersetzen. Generell wuerde ich aber eine 'Portierung' des : > veralteten Codes in Betracht ziehen, da nicht klar ist, wie lange : > diese Option noch unterstuetzt wird. : Soweit ich gehoert habe, uebersetzt g++ 2.7.2 for Schleifen wieder : "richtig" (da wissen welche anscheinend nicht, was sie wollen). Anstatt einen Fehler zu generieren wird in g++-2.7.2 eine Warning generiert: Vermutlich hatten die GNU Leute nicht damit gerechnet, dass es taeglich mehrere "Bug-Reports" gibt (ueber Monate). : Am besten, Du wartest noch etwas mit dem "portieren", die Compiler, die : _nicht_ dieses Verhalten haben sind derzeit noch stark in der Mehrzahl. Man kann Schleifen bequem so schreiben, dass sie mit beiden Fassungen funktionieren. Das ist hochgradig portabel und das, was man machen sollte. -- dietmar.kuehl@uni-konstanz.de http://www.informatik.uni-konstanz.de/~kuehl I am a realistic optimist - that's why I appear to be slightly pessimistic
Re: g++-2.7: for(int i=... 'i' undeclared ???
Author: Dietmar Kuehl
Date: Mon, 18 Dec 1995 15:09
Date: Mon, 18 Dec 1995 15:09
19 lines
1592 bytes
1592 bytes
Hi, Ullrich von Bassewitz (uz@wuschel.ibb.schwaben.com) wrote: : Aehem. Die Aenderung des Scopes einer im Kopf der for-Schleife deklarierten : Variable ist ein Feature des "proposed ANSI C++" Standards. Dieser Standard : ist _noch_nicht_abgesegnet_! D.h. alle Compiler die das jetzt bereits : implementieren (ich kenne nur g++) verhalten sich _nicht_ entsprechend dem : aktuellen Standard (ARM). Das "ARM" ist ein defacto Standard und zwar einer, zu dem sich keiner der derzeit verfuegbaren Compiler genau haelt. Es ist, IMHO, zulaessig und sinnvoll, dem DWP zu folgen, da es nur noch eine Frage der Zeit ist, bis das Verhalten (im Wesentlichen) ISO Standard wird. Die Aenderungen, die derzeit am DWP gemacht werden sind groesstenteils dazu da, um Mehrdeutigkeiten aufzuloesen und bereits angefangene Sachen auszuformulieren bzw. vergessenes auszugleichen. -- dietmar.kuehl@uni-konstanz.de http://www.informatik.uni-konstanz.de/~kuehl I am a realistic optimist - that's why I appear to be slightly pessimistic
Re: g++-2.7: for(int i=... 'i' undeclared ???
Author: Jens Immig,Sysadmin. Tel. 733
Date: Mon, 18 Dec 1995 16:12
Date: Mon, 18 Dec 1995 16:12
16 lines
1158 bytes
1158 bytes
Enno Sandner <enno@intellektik.informatik.th-darmstadt.de> writes: >Insgesamt faehrt man wohl am besten, wenn man in solchen Faellen >die Schleifenvariable vor der Schleife deklariert, also statt dessen > ja, noch dazu, wo das Verhalten des gcc-2.7.0 in Bezug auf die for(... Schleifen offensichtlich auf den zu erwartenden ANSI-C++ Standart basiert. Gruss, Jens -- EMail: immig@graphikon.com | Graphikon GmbH Jens Immig | Mandelstrasse 16 Tel: +49 (0) 30 42 104 733 | 10409 Berlin, Germany Fax: +49 (0) 30 42 104 750 |
Re: g++-2.7: for(int i=... 'i' undeclared ???
Author: Uwe Tantz
Date: Tue, 19 Dec 1995 11:03
Date: Tue, 19 Dec 1995 11:03
12 lines
1389 bytes
1389 bytes
> Enno Sandner <enno@intellektik.informatik.th-darmstadt.de> writes: > > >Insgesamt faehrt man wohl am besten, wenn man in solchen Faellen > >die Schleifenvariable vor der Schleife deklariert, also statt dessen > > Ich verfahre immer so, dass ich die for-Schleife selbst nochmal in ein Paar geschweifte Klammern einpacke. Dann ist das Redefinieren der Laufvariablen ja erlaubt, und der Code ist sowohl mit alten, als auch mit neuen Compilern vertraeglich. Auch wenn's unter Umstaenden nicht die Performanteste aller Alternativen ist. Gruss, Uwe
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads