Здравствуйте, Аноним, Вы писали:
А>Именно такой код:
А>А>#include <stdio.h>
А>void main()
А>{
А> int x = 0;
А> if (x = 0 || x++)
А> printf("%d\n", x);
А> printf("%d\n", x);
А>}
А>
А>что выдаст и почему?
А>
хе-хе — 0

смотрим:
if (x = 0 || x++)
если бы это воспринималось как
if ((x = 0) || x++)
то написалось бы 1 (ибо 0 || 1 есть true) (два раза)
но! из-за различного присиденса, изначальное выражение эквивалентно:
if (x = (0 || x++))
результатом (0||x++), при начальном x=0 является false (0). сразу после "выполнения"
|| значение x увеличивается на 1, но затем выполняется operator=() b и икс опять обнуляется. поэтому значение в if() есть false, а x=0.
Ы