2012-05-12 3 views
1

Почему следующее выражение оценивается в 0?Результат булевого выражения в C

i > --i 

Пусть я = 5. Вычисление выражения слева направо, мы оцениваем левый операнд (I), чтобы получить 5 и оценивать правый операнд (--i), чтобы получить 4. Таким образом, выражение о должен оцениваться до 1. Но когда я скомпилирую его с помощью gcc и запускаю его, он всегда оценивает значение 0. Есть ли недостаток в моем мыслительном процессе?

ответ

11

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

От C11, 6,5 (2):

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

+0

+1. '--i' выполняется до того, как значение' i' используется на * правой стороне *, но ничего не говорит о том, что значение 'i' находится на левой стороне *. –

+2

@BinyaminSharet Нет, C не указывает порядок оценки в подвыражении. Вы не знаете, сначала ли оценивается левая сторона (это самый левый 'i' в' i> --i', или если сначала оценивается правая сторона '>'. – nos

+0

@nos, KerrekSB - я получил свой Ошибка для исправления. – MByD