switch(указатель)
От: Аноним  
Дата: 28.08.08 20:12
Оценка:
Есть такой код:


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 {...} ? Может макросы или еще что-то?

Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.