2013-05-26 4 views
0

Я не могу объяснить себе, почему это даст 87. Моя IDE - это кодовые блоки и мой компилятор GNU GCC Compiler.Почему я получаю этот неожиданный вывод здесь? «87»

unsigned long getHigherValue(unsigned long Value1, unsigned long Value2); 

int main(){ 
    int a, b = 20; 
    b = 22; 
    /*============ 
    It works fine if I replace the two lines above with "int a = 20; int b = 22" 
    =============*/ 
    int c = getHigherValue(a, b); 
    printf("%d", c); 

    return 0; 
} 

unsigned long getHigherValue(unsigned long Value1, unsigned long Value2){ 
    unsigned long HigherValue = Value2; 
    if(Value1 > Value2){ 
    HigherValue = Value1; 
    } 
    if(Value1 == Value2){ 
    HigherValue = 0; 
    } 
    return HigherValue; 
} 

Выход:

ответ

10
int a, b = 20; 

Это оставляет a инициализирована, а b инициализируется до 20. Значение a является неопределенными, поэтому вы можете получить любой результат вашей программы (т.е. это неопределенное поведение).

+0

О да ... Спасибо. – Yannis

+0

Итак, теперь вопрос очень прост: почему неопределенное поведение всегда одно и то же? то есть я получаю 87. Связано ли это с тем, как оно помещается в память? Моя цель состояла в том, чтобы получить какие-то знания в любом случае :) – Yannis

+1

@Yannis: Вероятно, вы просто видите, что в то время происходило то, что произошло в этом регистре или месте стека. –

Смежные вопросы