Я сделал некоторый код, который выглядит следующим образом:Что делает «foo = bar1, bar2»?
int foo, bar1 = 4, bar2 = 7;
foo = bar1, bar2; // Look at this expression.
printf("%d", foo);
Составитель его с GCC, с -Wall и -Wextra. Выходной сигнал был 4
.
Помимо уродства, это выражение неопределенное поведение, или foo
всегда установлено на bar1
?
Следует вывод 4. Http: //en.wikipedia. org/wiki/Comma_operator "В языках программирования C и C++ оператор запятой (представленный токеном) является двоичным оператором, который оценивает свой первый операнд и отбрасывает результат, а затем оценивает второй операнд и возвращает это значение (и тип) ». но назначение - более высокий приоритет, поэтому он сначала назначает сбросы. –
@PaulTomblin Правда, но я думаю, что ',' имеет более низкий приоритет, чем '='. –
@PaulTomblin Он также находится в нижней части диаграммы приоритета (последний раз я проверил), поэтому в вопросе OP оператор присваивания сначала имеет приоритет, а оценка «bar2» практически бесполезна. – WhozCraig