🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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 ???
#1018
Author: Volker Wendt
Date: Sat, 16 Dec 1995 19:57
23 lines
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 ???
#1019
Author: Enno Sandner
Date: Sun, 17 Dec 1995 08:31
28 lines
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 ???
#1020
Author: Ortwin Gasper
Date: Sun, 17 Dec 1995 10:24
23 lines
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 ???
#1022
Author: Ullrich von Bassewitz
Date: Sun, 17 Dec 1995 11:51
16 lines
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 ???
#1021
Author: Ullrich von Bassewitz
Date: Sun, 17 Dec 1995 16:59
20 lines
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 ???
#1023
Author: Ullrich von Bassewitz
Date: Sun, 17 Dec 1995 23:59
30 lines
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 ???
#1025
Author: Enno Sandner
Date: Mon, 18 Dec 1995 11:18
46 lines
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 ???
#1027
Author: Dietmar Kuehl
Date: Mon, 18 Dec 1995 15:05
25 lines
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 ???
#1028
Author: Dietmar Kuehl
Date: Mon, 18 Dec 1995 15:09
19 lines
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 ???
#1030
Author: Jens Immig,Sysadmin. Tel. 733
Date: Mon, 18 Dec 1995 16:12
16 lines
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 ???
#1041
Author: Uwe Tantz
Date: Tue, 19 Dec 1995 11:03
12 lines
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