A 함수안에서 루프를 돌면서 B 함수를 반복해서 실행시킬 경우에
B 함수 안에 있는 Result값이 초기화 되지 않고 남아있다는걸 알게됬습니다.
String형 함수안에 Result := Result + 'a'라는 코드를 넣고 루프를 돌렸더니 루프가 돌때마다 a가 증가하였습니다.
테스트는 String형과 Integer형을 테스트 했는데 String형은 남아있는 Result값을 이용해서 다시 사용할수 있었고
Integer형은 재사용이 안되고, 쓰레기 값 상태로 변경조차 안됐습니다.
이렇게 함수의 Result값이 초기화 되지 않고 남아 있는 이유가 무엇인지 알 수 있을까요..
컴파일러 특성인것으로 추측은 되는데 왜 이렇게 동작을 하는건지 알고싶습니다.
고수님의 답변을 듣고싶습니다..
아래는 테스트를 하면서 만든 코드입니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Panel1: TPanel;
Button2: TButton;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function NumericTest: Integer;
function StringTest: string;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
TestVar : Integer;
begin
Memo1.Clear;
for I := 0 to 10 do
begin
TestVar := NumericTest;
Memo1.Lines.Add(IntToStr(TestVar));
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
I : Integer;
TestVar : string;
begin
Memo1.Clear;
for I := 0 to 10 do
begin
TestVar := StringTest;
Memo1.Lines.Add(TestVar);
end;
end;
function TForm1.NumericTest: Integer;
begin
Result := Result + 1;
end;
function TForm1.StringTest: string;
begin
Result := Result + 'a';
end;
end.
|