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;
}