Выполнение кода и выделение памяти для переменной
Привет.
Ниже приведу код иллюстрирующий мой вопрос: #include <stdio.h> int main() { goto label; auto int a; label: a = -32; printf("%d\n", a); } В результате выполнения программы мы получаем -32, то есть была полноценно использована переменная, код объявления которой при запуске программы выполнится не должен был. Цитирую из книжки (Программирование на языке СИ) на счёт объявления переменной с классом памяти auto (который я задал явным образом для иллюстрации): Цитата:
|
Если ставить точку остановки на auto int a; то отладчик останавливается аж на a = -32; со значением а=-858993460 (компилятор в Visual C++2008 Express), а на printf уже с присвоенным -32.
Самое интересное, если вспомнить что return 0; ещё не хватает, но это не так важно для сабжа, и поставить его перед auto int a; выхода не происходит. Это мне напоминает Pascal, в котором отдельным пунктом есть секция var, и которая не выполняется при трассировки, но она указ компилятору. |
Если поставить точку остановки на auto int a; даже без goto:
1 #include <stdio.h> 2 3 int main() 4 { 5 // goto label; 6 auto int a; 7 // label: 8 a = -32; 9 printf("%d\n", a); 10 return 0; 11 } То при трассировке тоже будет перескакивать на a = -32; Это уже говорит о том, что auto int a; не является пошаговой инструкцией, например как a = -32;, но чем тогда является auto int a; и где оно записывается если не в пошаговой инструкции? P.S. Классификатор auto я поставил для декоративной наглядности, что речь идёт именно о таких переменных. |
Время: 15:43. |
Время: 15:43.
© OSzone.net 2001-