Ниже приведен код, который я не понимаю.Запрос на запись активации в C
#include<stdio.h>
int main(int argc, char *argv[])
{
int num;
printf("\n Number: ");
scanf("%d", &num);
if (num >= 0)
{
int abs = num;
}
else
{
int abs = -num;
}
{
int abs;
printf("\n Values are %d %d", num ,abs);
}
return 0;
}
Когда я ввожу номер, как 4, выход Values are 4 4
Когда я ввожу номер как -4, выход Values are -4 4
Я не могу понять, как он способен печатать абсолютное значение ?. переменная abs, определенная в цикле if и else, должна быть освобождена после выхода.
Пожалуйста, дайте мне знать.
С уважением, Смуглянка
Вы уверены, что это причина? Я имею в виду, откуда вы знаете, что новые «abs» и «old'abs» расположены по одному адресу в стеке? –
Да, я уверен. Google для бесплатного приложения под названием Olly Debugger.Откройте приложение или что-то вроде Notepad.exe. Он остановится в исходном местоположении программы. Внизу экрана Олли вы увидите две панели - слева - память программы, сырая, а справа вы увидите сырой стек. Теперь несколько раз ударяйте F7 и видите изменения стека. Читайте о «стеке» в Википедии, чтобы понять больше. Получив идею, вы полностью поймете, что я ответил. Спросите больше, если потребуется. – Poni
Кстати, я не смог воспроизвести это поведение с помощью компилятора MSVC++ 2008 (не отлаживать или выпускать сборки), который учит нас, что это поведение, зависящее от компилятора. – Poni