Почему этот код принимает значение true?

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;
}
13
задан Cody Gray 7 January 2012 в 16:26
поделиться