2016-07-12 2 views
-2

Следующий код печатает AA:Неожиданный выход в коде C

#include <stdio.h> 
int main() 
{ 
    for(int i;i;i--) 
     printf("A"); 
    return 0; 
} 

Почему начальное значение переменной i является 2, а не какое-то значение мусора?

Является ли срок службы переменной i статическим или автоматическим?

+5

2 - значение для мусора. – chux

+0

@chux Как вы можете быть уверены? – Codor

+2

Эта программа демонстрирует неопределенное поведение для использования значения объекта с ** автоматической продолжительностью хранения **, в то время как оно неинициализировано. – EOF

ответ

1

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

for(static int i;i;i--) 
    printf("A"); 

Как переменная i не была инициализирована она имеет неопределенное значение, которое может быть значением ловушки.

+0

Если это значение ловушки, оно все равно вызовет UB? – ameyCU

+0

@ameyCU Да, это может привести к исключению. –

2

Видимо переменная i не инициализируется. Это означает, что поведение реализации не определено. И значение i - только стоимость мусора. Здесь 2.

+0

@EugeneSh. Спасибо за редактирование. – Codor