On Sun, 15 Nov 2009, Anthony Walter wrote:

Hi all. I am new to fpc and linux in general, though I do have a long
time experience with Delphi.

I was writing some code basic system (using the libc library) when I
ran across the following  problem .. some code:

const
 libc = 'libc.so.6';

type
 TTimeSpec = record
   Sec: Cardinal;  { Seconds }
   NSec: Cardinal; { Nanoseconds }
 end;
 PTimeSpec = ^TTimeSpec;

function nanosleep(const RequestedTime: TTimeSpec; Remaining:
PTimeSpec): Integer; cdecl; external libc;

The problem with fpc and the above import is with the RequestedTime
parameter, declared as a const record. In Delphi declaring a const
record parameter cause the compiler to generate code to pass the
record by reference (that is to say passing the address). In fpc,
however this is not happening.

No.

It is nowhere written in the Delphi specs that const parameters
are passed by reference. It is often so, but is by no means guaranteed.

If you want to pass it as a reference, you should use var. Not const.

Const means that the called procedure does not change the contents.
The compiler may then decide to pass it by reference if it is more
advantageous to do so, but it is not a rule that this is done.

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to