Различни изходи при дефиниране на локални променливи

Защо получавам резултата за i2 като 1 в DevC++, докато на други места получавам 0?

#include <stdio.h> 
int main(void) {
    int i1,i2;
    char c1,c2;
    float f1,f2;
    long l1,l2;
    double d1,d2; 
    printf("\n%d %d",i1,i2);
    printf("\n%c %c",c1,c2);
    printf("\n%d %d",f1,f2);
    printf("\n%l %l",l1,l2);
    printf("\n%lf %lf",d1,d2);
    return 0;
}

person Amartya Raghav    schedule 21.08.2015    source източник
comment
Още един въпрос по същия въпрос: stackoverflow.com/questions/32140438/   -  person Arkadiusz Drabczyk    schedule 21.08.2015
comment
comment
Още боклук. Освен неинициализирания автоматичен UB, има printf(%d....' на плаващ UB.   -  person Martin James    schedule 21.08.2015
comment
Гласувам да затворя този въпрос като извън темата, защото OP иска обяснение за две различни UB в програма с 14 реда. Това е боклук с домашна работа с множество измамници и с нулева или отрицателна употреба за бъдещи посетители на SO.   -  person Martin James    schedule 21.08.2015


Отговори (3)


Не сте инициализирали нито една от променливите, което води до Недефинирано поведение, когато ги отпечатвате. Имайте предвид, че когато декларирате

int i1,i2;
....

и ги оставите неинициализирани, те съдържат ненужни стойности.

person rakeb.mazharul    schedule 21.08.2015

Автоматичните обекти, които не са инициализирани или им е присвоена стойност, имат неопределена стойност, която е или неуточнена стойност, или представяне на прихващане.

person ouah    schedule 21.08.2015

Да, те съдържат ненужни стойности. Но защо всички останали отпечатват 0, но само i2 отпечатва 1. Ако това беше ненужна стойност, тогава за всяко изпълнение стойностите ще варират.

person Amartya Raghav    schedule 24.08.2015