Старшинство круглых скобок между post-fix и pre-fix в C - PullRequest
3 голосов
/ 24 июля 2011

Таблица предпочтений оператора C отмечает более высокий приоритет ().

Код:

# include <stdio.h>
int main()
{
    int temp=2;
    (temp += 23)++;    //Statement 1
    ++(temp += 23);    //Statement 2
    printf("%d",temp);
    return 0;
}

Мой вопрос, хотя скобки имеют более высокий приоритет, чем преисправьте оператор в утверждении 2, почему возникает ошибка.В утверждении 1 оба имеют одинаковый приоритет, но порядок оценки слева направо.Все та же ошибка.Третье сомнение: оператор + = имеет гораздо более низкий приоритет, чем причина ошибки.

error: lvalue required as increment operand

Ответы [ 2 ]

6 голосов
/ 24 июля 2011

lvalue - это значение, которому может быть назначено какое-то другое значение (поскольку оно находится слева от оператора присваивания).(temp += 23) - это rvalue.Ничто не может быть назначено ему.

2 голосов
/ 24 июля 2011

Я хотел бы добавить еще кое-что: похоже, вы пытаетесь изменить значение более одного раза в выражении .Это неопределенное поведение согласно стандарту C99 6.5 (2).

Между предыдущей и следующей точкой последовательности объект должен иметь сохраненное значение, измененное не более одного раза, путем оценкивыражение.Кроме того, предыдущее значение должно быть доступно только для чтения, чтобы определить значение, которое должно быть сохранено.

И сноска 71) показывает пример:

Этот параграф отображает неопределенные выражения оператора,как

i = ++i + 1;

a[i++] = i;

при разрешении

i = i + 1;

a[i] = i;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...