[fpc-pascal] Blockread and buffers

Peter J. Haas fpc.ml at pjh2.de
Thu Mar 24 01:13:26 CET 2005


Hi Jeffrey,

on 2005-03-23T22:16:26+02:00 Jeffrey wrote:
> However, the example below gives me a similar warning
> with 1.9.8, but not 1.9.6:

I don't get such a warning with a version some days ago.

> program vdnstbi;
> var
>   s:string;
> begin
>   str(16, s); // Variable "s" does not seem to be initialized
>   WriteLn(s);
> end.

> Does "S" really need to be initialized ?

It is the same problem like BlockRead. In TurboPascal there exist only
two variants of parameters, call by value and call by reference. Call
by value parameters are always input-only parameters. Call by
reference parameters can be input-only parameter, input/output
parameter or output-only parameter, the compiler can not differentiate
this.

Since Delphi there exists two more parameter variants: const and out.
const do mean, that the function don't change the parameter, it is
input-only parameter. out do mean, that the parameter is a output-only
parameter. Now the compiler can differentiate and generate dependable
hints.

I don't know, whether other compiler modes support const and out. If
yes, the RTL/FCL/LCL functions should use it. This do mean e.g.

procedure int_str(l: longint; out s: string);

instead of

procedure int_str(l: longint; var s: string);

wkr Peter.





More information about the fpc-pascal mailing list