![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оператор switch-case [D6, WinXP]
Vaddya © (2002-10-23 20:36:00)Как упоминалось на форуме, язык врага надо знать, поэтому задаю вопрос :) Есть код
int bigswitch(int msg, const int cs)
{
const int a = cs;
const int b = cs + 1;
const int c = cs + 2;
switch(msg) {
case a: return 4;
case b: return 5;
case c: return 6;
}
return msg + 10;
}
int main(int argc, char *argv[])
{
int i = 1;
cout << bigswitch(i, 1) << "\n";
return 0;
}
Так вот, компилятор ругается, что case expression not constant, хотя везде явно задано, что это константа и нигде в функции она меняться не будет - это тоже не позволительно. Как известно, такое же происходит и в Delphi.
Пример, хоть и "синтетический", если можно так сказать, но насущный. Например, лично мне при обработке сообщения WM_COMMAND таким же образом нужно пустить через switch хэндл окна, пославшего это сообщение, а не получается.
Как доказать компилятору, что в case одни константы, если мнеэто известно?
Игорь Шевченко (2002-10-24 12:47:00) [1]Vaddya © (24.10.02 11:07)
Конечно
Vaddya (2002-10-24 11:07:00) [2]Игорь Шевченко © (24.10.02 10:29)
В смысле, через if - else if - else if?
Игорь Шевченко (2002-10-24 10:29:00) [3]Vaddya © (23.10.02 21:21)
Хороший совет: не заниматься ерундой, а сделать так, как будет понятно компилятору.
Vaddya (2002-10-23 21:21:00) [4]Да нет, в этом случае msg может быть не константой, мы его можем поменять. А вот ругается на case expression not constant. А пока, если оставить все как есть, прийдется делать длинный список перечислений if - else if - else if ..., т.е. то, от чего и избавляет switch.
VaS (2002-10-23 21:09:00) [5]int bigswitch(const int msg, const int cs)