Код: Выделить всё
#define AAA 1
#define BBB 2
int X::func(int i) {
bool b = (i == 5);
int v = (b ? 10 : 5);
switch (i) {
case AAA:
if (b && v > 4) {
v = v + 1;
return 0;
}
break;
case BBB:
if (!b || v > 40) {
v = v + 2;
b = false; // direct jump here from the switch for i = AAA
return 0;
}
break;
}
return -1;
}
Часть случаев находится в #ifdef #endif блокировать. Дополнительные случаи возникновения проблемы находятся в этом блоке. Условие истинно, поэтому блок компилируется. В любом случае, я протестировал его после подавления этих двух операторов прекомпилятора, и это то же самое.
Если я добавлю скобки {, чтобы полностью охватить случаи как здесь, у меня все тот же результат:
Код: Выделить всё
case BBB: {
if (!b || v > 40) {
v = v + 2;
b = false; // direct jump here from the switch for i = AAA
return 0;
}
break;
}
Это похоже на ошибку компилятора, но в чем может быть причина?
Подробнее здесь: https://stackoverflow.com/questions/187 ... cted-place
Мобильная версия