stavo giocando con una certa sintassi e trovato alcune regole compilatore strane, si chiedeva che cosa il ragionamento è per questoC vs C++ switch definizione della variabile vs dichiarazione
C non verrà compilato questo, ma C++ sarà:
switch (argc) {
case 0:
int foo;
break;
default:
break;
}
Sia C e C++ si compilare questo:
switch (argc) {
case 0:
; int foo;
break;
default:
break;
}
C verrà compilato questo, ma non C++:
switch (argc) {
case 0:
; int foo = 0;
break;
default:
break;
}
gcc -v
è gcc version 4.9.3 (MacPorts gcc49 4.9.3_0)
se è importante. Mi rendo conto che la soluzione è quella di avvolgere il contenuto di case 0:
con parentesi graffe, ma io sono più interessato al ragionamento per errori di compilazione
[Questa risposta] (http://stackoverflow.com/a/92730/962089) è piuttosto pertinente. – chris
Sembra che il secondo caso funzioni ancora per C++ se si imposta 'foo' in un'istruzione aggiuntiva. gcc si lamenta solo della variabile non utilizzata in [questo esempio] (http://coliru.stacked-crooked.com/a/ba80bc1da97d8212), e clang va bene con esso. – jaggedSpire
@chris, Grazie, il terzo caso ha senso ora (non posso saltare l'inizializzazione in C++) – asimes