Ich bin auf ein merkwürdiges Phänomen in C gestoßen, vielleicht kann mir das jemand erklären. Extrem eingedampft sieht das Problem so aus:
int main(int argc, char* arg[]) {
int i = 0;
switch (i) {
case 0:
int j = 7;
break;
}
}
Der Compiler (aufgerufen mit ‚gcc test.c‘) sagt dazu „t.c:5: error: expected expression before ‚int‘„. Mit geschweiften Klammern funktioniert der case-Block dagegen prima:
case 0: {
int j = 7;
break;
}
Zu meinem grössten Erstaunen klappt auch folgender Block:
case 0:
i = 3;
int j = 7;
break;
Es geht halt nur nicht wenn direkt nach dem case eine Variablendeklaration kommt.
Wenn man schon innerhalb eines case eine Variable deklarieren kann… warum dann nicht ganz am Anfang? Ich meine: ich habe ja Lösungen für das Problem. Mir fehlt halt nur das ‚Problembewusstsein‘. Kann mir das jemand vermitteln?