int main() {
int a = 1;
int b = 0;
if (a = b || ++a == 2)
printf("T: a=%i, b=%i", a, b);
else
printf("F: a=%i, b=%i", a, b);
return 0;
}
Посмотрим на этот простой фрагмент кода. Результат: T: a = 1, b = 0
Почему? (примечание a=b
использует операнд назначения, а не сравнение)
Я понимаю, что ноль присваивается a, тогда a увеличивается на 1. 1 не равно 2. Поэтому результат должен быть a = 1, b = 0. Но почему это условие оценивается как истинное? Ни один из (a=b)
или (++a == 2)
не верен... Что я пропустил?
Вот еще одна короткая программа, которая печатает F, как ожидалось:
int main() {
int a = 1;
int b = 0;
if (a = b) printf("T"); else printf("F");
return 0;
}