Var
i :integer;
Procedure p1;
Procedure p2;
var i : real;
begin
i:=2;
end;
Begin
i:=99;
p2;
end;
function f: integer;
begin
i:=0;
f:=i;
end;
BEGIN
p1;
{*} Writeln(i+f);
{**} Writeln(f+i);
END.
по условию * должно выводить "99", а ** - "0".
Но writeln(i+f) выдает тоже "0", т.е в строке * сначала высчитывается значение функции f, в лишь затем выполняется сама строка.
А по условию writeln(i+f) должно выводить "99".
Надо объяснить, почему компилятор просматривает программу в таком порядке и предложить вариант исправления программы.
Весь прикол в том, что у меня паскаль эту программу даже трассировать отказывается - пишет "Error 202: Stack overflow error." - с чего бы это?
Надеюсь кто-нибудь разберется. Заранее благодарю.