2015-10-02 3 views
-2

У меня есть программа C, как этотЦелых значений, возвращаемые функцией в C

#include <stdio.h> 
void print_int() 
{ 
    int i; 
    i++; 
    printf("%d\n",i); 
} 
int main() 
{ 
    print_int(); 
    print_int(); 
    return 0; 
} 

Выход возвращенного этой программа

1 
2 

У меня есть сомнения относительно этого выхода. Разве это не должно быть два значения мусора, потому что переменная i не инициализируется?

+2

Это не определено bahaviour. 1 также может быть мусором. –

ответ

2

Вы получаете неопределенное поведение.

Возможно, переменная i находится в той же физической памяти, что и при каждом вызове, она удаляется при запуске, и ничто не пишет там мусор, поэтому вы видите эти конкретные значения. Если вы должны были вызвать какую-то другую функцию между двумя вызовами до print_int(), результаты очень сильно различались.

Это просто «удача», конечно, и эта программа сломана.

1

Значение неинициализированного локального нестатической переменной неопределенными, используя ее, пока она еще не инициализирована приводит к неопределенному поведению . Иногда это может быть кажется, чтобы работать, но это действительно не так.

Однако ваш случай легко объяснить. Локальная переменная i должна занимать некоторое место в памяти. Похоже, что это место памяти содержало 0, когда функция была вызвана. И в следующий раз, когда вы вызовете функцию, она будет находиться в том же месте. Это поведение не следует учитывать, хотя неопределенное поведение по-прежнему является неопределенным поведением.

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

  • Нет связанных вопросов^_^