Я знаю, что несколько выражений оцениваются справа налево. Ex:Оценка выражений внутри printf в C
int i = 0;
printf("%d %d %d", i, i++, i++); // Prints 2 1 0
Но когда дело доходит до каждого выражения для оценки, я не получаю, если она справа налево или наоборот.
int main()
{
int a = 1, b = 1, d = 1;
printf("%d", a + ++a); // Result = 4
}
Учитывая оценку слева направо, предшествующий код должен быть оценен как 1 + 2 = 3
int main()
{
int a = 1, b = 1, d = 1;
printf("%d", ++a + a); // Result = 4
}
И это следует оценить как 2 + 2 = 4
Но в обоих в случаях, когда ответ равен 4.
Может ли кто-нибудь объяснить, как эти выражения оцениваются?
_I знаю, что несколько выражений оцениваются справа налево. Пример: _ 'int i = 0; printf ("% d% d% d", i, i ++, i ++); // Prints 2 1 0': ** Неверно **, это неопределенное поведение. –
@AlterMann Этот вопрос содержит 2 вопроса: порядок оценки аргументов функции и плохо упорядоченные операции одной и той же переменной в одном выражении. Этот дубликат объясняет только последнее, я снова открою это. – Lundin
@Lundin Таким образом, вы неправильно открыли его. Дубликат на самом деле объясняет порядок: http://stackoverflow.com/a/18260171/4082723, http://stackoverflow.com/a/949508/4082723 – 2501