Есть такой код:
int main() {
int *a=new int;
int *b=a;
int *c=new int;
switch(a) {
case (b): break;
case (c): break;
default: break;
}
return 0;
}
При компиляции cl.exe пишет, что
main.c(5) : error C2050: switch expression not integral
main.c(6) : error C2051: case expression not constant
main.c(7) : error C2051: case expression not constant
Собственно интересует первая строчка отчета cl
Возможно ли как-то сравнить указатели в таком операторе, не прибегая к if-ам? Есть ли возможность под case'ами ставить не только константы, а и переменные?
P.S. Интересно, неужели Microsoft'овцам так трудно было разрешить использовать переменные под case? Вроде ассемблерная реализация не сильно усложниться.. Или это следование стандартам?
[Added] Что-то подсказывает, что так делать нельзя в любом С-компиляторе.. Может тогда существует вариант попроще, чем это монструозное
if (a==b) {...} else if (a==c) {...} else if (a==d) {...} else if (a==e) else {...} ? Может макросы или еще что-то?
Спасибо