🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #310

Re: Error "jump past initializer"

#310
From: Bernd Eggink
Date: Fri, 25 Aug 1995 08:24
80 lines
3080 bytes
Ullrich von Bassewitz (uz@wuschel.ibb.schwaben.com) wrote:
>  Dinger Dirk 3576 (dinger@ens.ascom.ch) wrote:
>  > Gibt es jemanden unter Euch, der mit der Fehlermeldung
>  > "Jump past initializer" etwas anfangen kann.

>  Ja, sowas aehnliches bekomme ich oefter (und aergere mich ueber C++ :-).

>  Du bekommst das bei Konstrukten wie

>      switch (X) {

>          case 3:
>              unsigned I = 1;
>              if (A == B) {
>                  // Some code 
>              }
>              break;

>          case 4:
>              // ...

>      }


>  I ist im kompletten umschliessenden Block gueltig 

Genauer gesagt, ab Deklaration... 

> (das ist das Switch-
>  Statement), die Initialisiuerung wird aber u.U. nicht ausgefuehrt. Wenn Dein
>  Compiler das nur bei "richtigen" Objekten bringt, dann hast Du Glueck gehabt.
>  Wenn er die Meldung auch bei den Grundtypen bringt (wie meine(r)), dann ist
>  das irgendwie Unfug, vor allem wenn man sich mal anschaut, wie man die Sache
>  loesen kann:

>          case 3:
>              unsigned I;
>              I = 1;
>              if (A == B) {
>                  // Some code 
>              }
>              break;

>  Wird die Variable nicht mehr direkt initialisiert, dann beschwert sich
>  zumindest mein Compiler nicht mehr.

>  Andere Loesungsmoeglichkeiten sind:
>    * Variablendeklaration komplett aus dem Block rausziehen.
>    * Nach "case" einen neuen Block anfangen:
>          case 3:
>              {
>                  unsigned I = 1;
>                  if (A == B) {
>                      // Some code 
>                  }
>              }
>              break;

Das sollte man sich meiner Meinung nach sowieso zur Gewohnheit machen.

>  Nach dem Sichtbarkeitsregeln von C++ ist die Fehlermeldung verstaendlich,
>  trotzdem finde ich das Verhalten idiotisch, vor allem deshalb, weil die
>  einfachste Abhilfe die Deklaration ohne gleichzeitige Intialisierung ist -
>  und davon wollte Stroustrup in C++ ja eigentlich wegkommen.

Das Verhalten der Compiler zeigt nur, dass sie sich noch nicht
nach dem neuesten Standard richten. Der legt naemlich genau das fest,
was Du Dir wuenschst: Es ist _erlaubt_, Deklarationen zu ueberspringen, 
sofern es sich um arithmetischen oder Pointer-Typen ohne Initialisierung 
handelt (6.7, Vers 3).

Gruss
	Bernd

--
+----------------------------------+
|          Bernd Eggink            |
|    Rechenzentrum Uni Hamburg     |
| admin@rzaix13.rrz.uni-hamburg.de |
+----------------------------------+
Technical Details
Message-ID: <41k1bo$ksa@rzsun02.rrz.uni-hamburg.de>
Path: arc1-ca.pugleaf.net!news.rrz.uni-hamburg.de!rzaix13!admin
References: <1995Aug24.092305.8407@hasler.ascom.ch> <DDtvKp.DDs@wuschel.ibb.schwaben.com>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.rrz.uni-hamburg.de!rzaix13!admin
From: admin@rzaix13.uni-hamburg.de (Bernd Eggink)
Newsgroups: de.comp.lang.c++
Subject: Re: Error "jump past initializer"
Date: 25 Aug 1995 08:24:24 GMT
Organization: University of Hamburg -- Germany
Message-ID: <41k1bo$ksa@rzsun02.rrz.uni-hamburg.de>
References: <1995Aug24.092305.8407@hasler.ascom.ch> <DDtvKp.DDs@wuschel.ibb.schwaben.com>
NNTP-Posting-Host: rzaix13.rrz.uni-hamburg.de
X-Newsreader: TIN [version 1.2 PL2]