синтаксис — синтаксическое использование оператора запятой в переполнении стека

Я просматривал чей-то другой код и не смог получить синтаксис следующего

c = x<0 ? x = -x,'L':'R';

а также

if(x) x--,putchar(c);

Исходя из символики, ясно, что в первой переменной с присваивается значение «L» или «R». А во втором выполняются и x—, и putchar (). Но какова роль оператор запятой Вот??

1

Решение

Но какова роль оператора запятой здесь?

В этом случае код запутывания. Первоначальный разработчик, вероятно, думал, что они были умны.

Оператор запятой позволяет вам выполнять несколько действий в одном выражении, но вам почти всегда лучше использовать два выражения. В этих случаях он расширяется до:

if( x < 0 ) {
x = -x;
c = 'L';
} else {
c = 'R';
}

а также

if(x) {
x--;
putchar(c);
}
5

Другие решения

Оператор запятой оценивает оба выражения и возвращает значение последнего.

  • Первое выражение делает две вещи в одном утверждении. Если выбирает «L»
    или ‘R’, а также устанавливает x в отрицательное значение, если выбрано ‘L’.
  • Второе выражение (часть после ‘if’) уменьшает x, а затем
    ставит персонажа. Смысл этого неясен без большего контекста.

Читаемость в обоих случаях может быть улучшена с помощью отдельных операторов, а не оператора запятой. Первая попытка подать if утверждение в условное выражение. Но второй уже использует if Заявление, поэтому неясно, почему оператор запятой был выбран вообще.

5

Роль оператора запятой в этом контексте состоит в том, чтобы разрешить использование условного оператора и написать присваивание как часть вычисления одного из выражений.

На мой взгляд, это просто ужасный стиль. if Заявление было бы лучше передать смысл этого кода, и вряд ли было бы менее эффективным.

2
По вопросам рекламы [email protected]