Warum können keine Variablen deklariert werden, die in einer switch-Anweisung?

Ich habe mich immer gefragt, diese - warum kann man keine Variablen deklarieren, nach einer case-label in switch-Anweisung? In C++ kann man Variablen deklarieren, so ziemlich überall (und deklarieren Sie in der Nähe der ersten Nutzung ist natürlich eine gute Sache), aber Folgendes noch nicht:

switch (val)  
{  
case VAL:  
  //This won't work
  int newVal = 42;  
  break;
case ANOTHER_VAL:  
  ...
  break;
}  

Den oben genannten gibt mir die folgende Fehlermeldung (MSC):

Initialisierung von 'newVal' übersprungen 'Fall' label

Scheint dies eine Einschränkung auch in anderen Sprachen. Warum ist das so ein problem?

Für eine Erklärung, basierend auf der C-BNF-Grammatik, siehe stackoverflow.com/questions/1180550/weird-switch-error-in-obj-c/...
Hier ist ein wirklich gut Lesen über switch-Anweisungen und Etiketten (ABC:) im Allgemeinen.
Ich würde sagen, 'Warum kann nicht Variablen initialisiert werden, die in einer switch-Anweisung anstelle deklariert'.Da nur die Deklaration der Variablen geben Sie mir nur eine Warnung in MSVC.

InformationsquelleAutor Rob | 2008-09-18

Schreibe einen Kommentar