a›b›c Оценка, когда каждый имеет числовые значения [дубликаты]

Я наткнулся на конкурентный вопрос C, который звучит следующим образом:

Найти результат:

#include <stdio.h>
int main(void) {
    int a=5, b=10, c=5;
    int x;
    x = a>b>c;
    printf("%d\n", x);
    return 0;
}

Компилятор отвечает 0.

Мое объяснение состоит в том, что, возможно, это побочный эффект оценки справа налево. Я предполагаю, что сначала оценивается b>c (при условии, что он сначала помещается в стек, я здесь запутался, поскольку знаю, что > ассоциативен слева направо), что оценивается как истинное. Значение этой истинной переменной, которая представляет собой число > 0 (нам неизвестно), по которому оценивается a > that_value, дает результат. Впрочем могу ошибаться!

Любые указатели/понимание того, как оценивается результат, были бы полезны. Спасибо.

EDIT: я протестировал очень старый компилятор, который дал 1, это была ошибка с моей стороны, исправил ее.


person Jishan    schedule 09.10.2014    source источник
comment
Голосующий против, пожалуйста, объясните причину вашего отрицательного голосования? Так что я могу исправить это!   -  person Jishan    schedule 09.10.2014
comment
я тоже не получаю отрицательных голосов, так как это выглядит странно и интересно. Тем не менее, какой-то компилятор? Какой компилятор дает какой результат?   -  person user2504380    schedule 09.10.2014
comment
Я сомневаюсь, что вы найдете компилятор, который отвечает на что-либо, кроме 0. Спецификация языка всегда четко указывала на ассоциативность слева направо оператора >.   -  person Jens    schedule 09.10.2014
comment
Это вопрос в первую очередь о том, почему один компилятор дает другой результат, чем другой, или почему вы получаете 0? Если речь идет о последнем, это дубликат уже существующих вопросов.   -  person alk    schedule 09.10.2014
comment
@alk Нет, меня смутила часть, которая не отправляет выражения C в стек, а внутренняя оценка должна быть справа налево?   -  person Jishan    schedule 09.10.2014


Ответы (2)


Компилятор C читает код сверху вниз, слева направо.
здесь, a>b>c => 5 > 10 > c => 0 > 5 (false представлено 0) => 0


Таким образом, ответ должен быть 0 для большинства компиляторов, которые следуют этому порядку старшинства.

Подробнее о Порядке работы

person Asis    schedule 09.10.2014
comment
+1, но это не потому, что компилятор читает код слева направо, а потому, что ассоциативность < слева направо. - person Yu Hao; 09.10.2014
comment
@YuHao Меня смущает часть, которая не отправляет выражения C в стек, а внутренняя оценка должна быть справа налево? - person Jishan; 09.10.2014
comment
@YuHao это верно. С другими операторами, например. + ассоциативность справа налево - person Baldrickk; 09.10.2014
comment
есть некоторые операторы, которые выполняются справа налево, например оператор присваивания x = 5, 5 берется справа и сохраняется слева от оператора. Помимо такого рода операторов и некоторых редких функций, все остальные на c выполняются слева направо. - person Asis; 09.10.2014
comment
@Debojyoti, если знак + выполняется справа налево, что будет ответом 6+++x; пусть здесь х будет 5 . - person Asis; 09.10.2014

Для реляционных операторов ассоциативность слева направо, поэтому всегда вы должны получить 0. Интересно, как вы получили 1 на каком-то компиляторе.

person Gopi    schedule 09.10.2014