[fpc-pascal] Initialization of constant record member of pointer type

LacaK lacak at zoznam.sk
Tue Dec 1 11:00:25 CET 2020


Dňa 30.11.2020 o 23:26 Sven Barth via fpc-pascal napísal(a):
> Am 30.11.2020 um 13:20 schrieb LacaK via fpc-pascal:
>> Hi,
>>
>> is there a way how to initialize record member of pointer type (other 
>> than PChar) in the following example:
>>
>> type
>>   TMyRec=record
>>     a: PByte; // if I change PByte to PAnsiChar then it works
>>   end;
>>
>> const
>>   MyConst: TMyRec = (a: 'abcd'); // I want to a points to static 
>> memory where 'abcd' is stored
>>
>> I would like to initialize a to be pointer to another known constant 
>> or directly to supplied string constant.
>>
>> For example something like:
>>
>> const
>>   MyConst1='abcd';
>>   MyConst2=TMyRec = (a: @MyConst1);
>
> Untyped constants don't have an address you can take. You need to use 
> a typed constant:
>
> === code begin ===
>
> const
>   MyConst1: Byte = 123;
>   MyConst2: TMyRec = (a: @MyConst1);
>
> === code end ===
>
Thank you, yes it works. I have used:

const
   MyConst1: AnsiString = 'abc'
   MyConst2: TMyRec = (a: @MyConst1[1]);

unfortunately it seems, that I can not use Length(MyConst1) in:

type
   TMyRec=record
     l: integer;
     a: PByte;
   end;

const
   MyConst1: AnsiString = 'abc';
   MyConst2: TMyRec = (l: Length(MyConst1); a: @MyConst1[1]);

Why is it prohibited?

-Laco.



More information about the fpc-pascal mailing list