🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
3 messages
3 total messages Started by Dinger Dirk 3576 Thu, 24 Aug 1995 09:23
Error "jump past initializer"
#303
Author: Dinger Dirk 3576
Date: Thu, 24 Aug 1995 09:23
12 lines
737 bytes
Hallo ihr da draussen !

Gibt es jemanden unter Euch, der mit der Fehlermeldung
"Jump past initializer" etwas anfangen kann.

Es muss irgendetwas damit zu tun haben, wenn man den
Konstruktor eines Objekts innerhab einer switch/case
Struktur aufruft, aber ich kann mir das nicht erklaeren.


Dirk Dinger
Re: Error "jump past initializer"
#309
Author: Ullrich von Bassewitz
Date: Thu, 24 Aug 1995 18:34
67 lines
2288 bytes
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 (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;

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.

Gruss


	Uz


-- 
Ullrich von Bassewitz                              uz@ibb.schwaben.com
Re: Error "jump past initializer"
#310
Author: 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 |
+----------------------------------+
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