On 24.03.2018 23:33, Ondrej Pokorny wrote:

    Another question about this sentence in FPC docs: "Managed types are
    always initialized: in general this means setting the reference
    count to
    zero, or setting the pointer value of the type to Nil."

    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'?


For managed types this is indeed guaranteed. Otherwise there'd be exceptions upon the first use of the variable as the RTL would assume that the value is valid.

OK, thanks. My assumption was that setting local managed types to nil is guaranteed only once at the first routine call. And that it is an implementation detail if it is niled at the second call or reused from the first call.

I probably mixed it up with the Result variable (what Maciej wrote about).

I found the source of my assumption, I get a compiler warning in this case:

program StringsTest;
function Test: string;
var S: string;
begin
  S := S + 'a';
  Result := S;
end;
begin
  Writeln(Test);
end.

Emits:
StringsTest.lpr(5,8) Warning: Local variable "S" of a managed type does not seem to be initialized

Why do I get the compiler warning when the variable is indeed guaranteed to be initialized to nil/empty string?

Ondrej
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to