A>>Забавно A2> а можно пояснить...
Видимо, человек хотел чтобы switch срабатывал одинаково для значений 0x07,0x08,0x09 одинаково, а получилось что он сработал только для 0x09 из-за специфики оператора ",".
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, a4reg, Вы писали:
A>Забавно
Аналогично (по памяти, только идея ):
for (int i = 0, j = 0; i < firstBoundaryLimit, j < secondBoundaryLimit; ++i, ++j){ ... }
В основном, это работало, так как массивы преимущественно использовались одномерные, но иногда ...
Что показательно, конструкция обладает некоторой визуальной симметрией по параметрам цикла.
Причем, автор кода — чистый "плюсовик", опыт работы — больше 10 лет.
Дарю идею, как вопрос для собеседования кандидатов.
К этому моменту у меня внутри 0.5, 0.7, 0.33 (с) НС
Здравствуйте, a4reg, Вы писали:
A>Сейчас принесли код на C++. Попросили помочь найти ошибку. Ошибка была в следующем фрагменте:
A>
A> case 0x07 ,
A> 0x08 ,
A> 0x09 :
A>
A>Забавно
что забавного?
Error 1 error C2051: case expression not constant
может я чота не так понял?
char* getTest(int n){
switch (n){
case 1: return"1";
case 4: return"4";
case 5: return"5";
case 6: return"6";
case 8, 9: return"8, 9";
default: return"default";
}
}
int main(int argc, char* argv[]){
for (int i = 0; i < 10; i++)
printf("%d - %s", i, getTest(i));
return 0;
}
Здравствуйте, Vain, Вы писали:
V>Здравствуйте, Ash-2, Вы писали:
A2>> а можно пояснить... V>Видимо, человек хотел чтобы switch срабатывал одинаково для значений 0x07,0x08,0x09 одинаково, а получилось что он сработал только для 0x09 из-за специфики оператора ",".
А для тех, кто совсем не в теме, что делает этот оператор вплюсах?
Здравствуйте, dzkras, Вы писали:
D>А для тех, кто совсем не в теме, что делает этот оператор вплюсах?
в данном случае просто возвращает свой второй аргумент.
А вообще, поскольку аргументы в С++ вычисляются до вызова, то запись вида
c = a += 1, b;
даже имеет смысл. Ну и еще запятую ставят в сигнатурах функций и списках шаблонных аргументов.(ну в макросах еще, но это не с++)
Больше ничего про запятую в С++ не помню
D>Ну и еще запятую ставят в сигнатурах функций и списках шаблонных аргументов.(ну в макросах еще, но это не с++) D>Больше ничего про запятую в С++ не помню
Только это другая запятая.
Её перегрузить не получится, например.
Здравствуйте, Muxa, Вы писали:
M>Здравствуйте, a4reg, Вы писали:
A>>Сейчас принесли код на C++. Попросили помочь найти ошибку. Ошибка была в следующем фрагменте:
A>>
A>> case 0x07 ,
A>> 0x08 ,
A>> 0x09 :
A>>
A>>Забавно M>что забавного? M>Error 1 error C2051: case expression not constant
M>может я чота не так понял? M>
M>char* getTest(int n){
M> switch (n){
M> case 1: return"1";
M> case 4: return"4";
M> case 5: return"5";
M> case 6: return"6";
M> case 8, 9: return"8, 9";
M> default: return"default";
M> }
M>}
M>int main(int argc, char* argv[]){
M> for (int i = 0; i < 10; i++)
M> printf("%d - %s", i, getTest(i));
M> return 0;
M>}
M>
Очевидно компиллеры разные на VC 8-ой invalid constant expression
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Здравствуйте, Шебеко Евгений, Вы писали:
ШЕ>Мне нравится: ШЕ>
ШЕ>int v=0;
ШЕ>v;
ШЕ>
ШЕ>Ничего плохо, просто забавно что компилируется. ШЕ>Понимаешь всю глубину плюсов
Ну дык стандартный ход, чтобы заткнуть warning про неиспользуемую переменную.
Чаще используется для ненужных входных параметров, когда нельзя менять сигнатуру (типа интерфейс).
Если нужно чтобы компилялось на разных платформах, pragma-то у всех разная, так что не заюзаешь без ifdef.
Более-менее кошерно. Оптимизатор все равно выкинет.
К этому моменту у меня внутри 0.5, 0.7, 0.33 (с) НС