I grał z jakimś składni i znaleźć jakieś dziwne zasady kompilatora, zastanawiałem się co rozumowanie jest dla tegoC vs C++ switch definicji zmiennej vs deklaracji
C nie będzie skompilować ten jednak C++ będzie:
switch (argc) {
case 0:
int foo;
break;
default:
break;
}
Zarówno C i C++ będzie skompilować ten:
switch (argc) {
case 0:
; int foo;
break;
default:
break;
}
C skompiluje to, ale nie C++:
switch (argc) {
case 0:
; int foo = 0;
break;
default:
break;
}
gcc -v
jest gcc version 4.9.3 (MacPorts gcc49 4.9.3_0)
jeśli to ma znaczenie. Zdaję sobie sprawę, rozwiązaniem jest owinąć zawartość case 0:
z nawiasów, ale jestem bardziej zainteresowany w rozumowaniu błędów kompilacji
[Ta odpowiedź] (http://stackoverflow.com/a/92730/962089) jest w pewnym sensie istotna. – chris
Wygląda na to, że drugi przypadek nadal działa dla C++, jeśli ustawisz 'foo' w dodatkowej instrukcji. gcc po prostu narzeka na nieużywaną zmienną w [tym przykładzie] (http://coliru.stacked-crooked.com/a/ba80bc1da97d8212), a clang jest z nią w porządku. – jaggedSpire
@chris, Dzięki, trzeci przypadek ma teraz sens (nie można przeskoczyć inicjalizacji w C++) – asimes