[fpc-pascal] Changing var to out in rtl code

Sven Barth pascaldragon at googlemail.com
Sun Nov 21 16:37:46 CET 2010


On 21.11.2010 16:22, Max Vlasov wrote:
> Hi,
> I'm one of those developers who takes hints and warnings seriously and I
> must say at least once a week it helps me find a bugs even before
> running the program. So when I got a warning about some uninitialized
> variable passed by reference (Delphi 5 is ok with such variable being
> uninitialized), I thought what I should do to fix this, and the best
> solution for this is changing the declaration from "var " to to "out "
> (CMIIW).
>
> But is it possible to do the same (partially, gradually or in any other
> way) for the "legacy" code that keeps the interface compatibility with
> Delphi. For example TStrignList.Find(const S: string; var Index:
> Integer): Boolean; declares "var " so my existing fragments expecting
> just an result from this call, got "Hint: Local variable "Index" does
> not seem to be initialized" warning. But looking at the implementation
> details it seems it is safe to change "var Index" to "out Index" and
> possibly it is also safe for any delphi/lazarus code calling this method
>
> I'm sure it is in any way not the first priority task (I can change the
> corresponding calling fragments), but just interesting what others think
> about it.

Here is an old bug report where "var" => "out" is discussed as well: 
http://bugs.freepascal.org/view.php?id=11263
I suggest you to read all commants to find the one or other pitfall 
regarding this (especially Jonas' comment 19338).

That said I personally think that TStringList.Find could be changed 
indeed, as it is a) in an objfpc unit and b) the param isn't a reference 
counted one. (But as I'm not a member of the FPC team, I have nothing 
final/definite to say here ^^)

Regards,
Sven



More information about the fpc-pascal mailing list