Article View: de.comp.lang.c++
Article #310Re: Error "jump past initializer"
From: Bernd Eggink
Date: Fri, 25 Aug 1995 08:24
Date: Fri, 25 Aug 1995 08:24
80 lines
3080 bytes
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!adminReferences:
<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]