<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2018-03-24 20:49 GMT+01:00 Ondrej Pokorny <span dir="ltr"><<a href="mailto:lazarus@kluug.net" target="_blank">lazarus@kluug.net</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Does it mean I can assume a local string variable is always (=whenever the routine is called) initialized to ''? I.e. that TestB always returns 'a'?<br>
<br>
function TestB: string;<br>
var B: string;<br>
begin<br>
  B := B + 'a';<br>
  Result := B;<br>
end;<br>
<br>
Until now I though that the above code is unsafe and I always initialized all local variables (also managed) before use. I assumed the initialization to empty string does not need to happen at every routine call.<br></blockquote><div><br></div><div>Please note that string/dynamic array as Result is exception (it works like *var* parameter). IMO this is the ugliest Pascal behavior ever:</div></div><div class="gmail_extra"><br></div>=== example begin ===<br clear="all"><div><div>function test1: string;</div><div>begin</div><div>  Result := Result + 'a';</div><div>end;</div><div><br></div><div>function test2: TArray<byte>;</div><div>begin</div><div>  SetLength(Result, Length(Result) + 1);</div><div>end;</div><div><br></div><div>begin<br></div><div>  writeln(test1); // print a</div><div>  writeln(test1); // print aa</div><div>  writeln(test1); // print aaa</div><div>  writeln(test1); // print aaaa</div><div>  writeln(Length(test2)); // print 1</div><div>  writeln(Length(test2)); // print 2</div><div>  writeln(Length(test2)); // print 3</div><div>  writeln(Length(test2)); // print 4</div><div>end.</div><div>=== example end ===</div><div>       </div></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>Best regards,<br>Maciej Izak</div></div></div>
</div></div>