2015-09-06 4 views
-4
int main() 
{ 
    int x=35; 
    printf("%d\n%d\n%d\n",x==35,x=50,x>35); 
    return 0; 
} 

В приведенной выше основной функции выход выходит быть 0 50 0. Почему это так, что оператор сравнения производит выходной сигнал 0, даже когда значение x равно 35.Что делает оператор сравнения в C?

I Я также немного запутался в выходе, полученном x>35, потому что когда это скомпилировано, значение x было обновлено до 50, чем было сделано так, чтобы он выдавал результат 0 вместо 1.

+3

Порядок оценки параметров 'printf' * не указан * в стандарте. – Maroun

+0

Dup: http://stackoverflow.com/questions/949433/why-are-these-constructs-using-undef ined-behavior –

ответ

3

x = 50 - назначение, и, по-видимому, параметры оцениваются в обратном порядке:

, поэтому x> 35 сначала оценивается как false (0), а затем x = 50 как присваивание, которое оценивается как 50 как побочный эффект, затем x == 35, который снова является ложным (0).

(На самом деле, как говорит другой ответ, этот порядок исполнения не указан.

+3

На самом деле это неопределенное поведение. Чтение и запись в одну и ту же переменную без промежуточных точек последовательности. – juanchopanza

3
printf("%d\n%d\n%d\n",x==35,x=50,x>35); 

Это не определено ли x==35 или x=50 оценивается в первую очередь.

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

Смежные вопросы