Hi,
This came up in http://forum.lazarus.freepascal.org/index.php/topic,42179.0.html
const
x = ShortString('abc');
begin
writeln(SizeOf(x));
end.Delphi (7) prints 256, fpc prints 3.
Is that a bug or an implementation detail?
Just curious.
Bart

Mailing lists / fpc-devel / 2018-08
6 messages · 4 people · –
Reply by email Subscribe to this list Your subscription
Read-only archive. Use j and k to move between messages.
Hi,
This came up in http://forum.lazarus.freepascal.org/index.php/topic,42179.0.html
const
x = ShortString('abc');
begin
writeln(SizeOf(x));
end.Delphi (7) prints 256, fpc prints 3.
Is that a bug or an implementation detail?
Just curious.
Bart
Implementation detail.
And it seems to be wrong on Delphi size, because for reason it assigns a type to a (non-typed) constant.
It would make sense to return 256, if the constant was declared like this: const
x : ShortString = 'abc';and fpc does recognize such typed constant as 256 in size.
It's odd that such expression compiles w/o any warnings or notes. (i.e. "ignoring typecasting for constant value expressions")
thanks,
Dmitry
Interesting.
Yet the compiler still seems to add some type or at least type specific behaviour. (That alone is ok)
But if the first string has the length in a[0], then that constant has 6 bytes of data. Yet sizeof only reports 5.
So what is the real size of this constant?
program Project1; {$H+}
const
a = 'abcde';
b = 'abcde
1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
begin
writeln(SizeOf(a)); // 5
writeln(SizeOf(b)); // 5
writeln(byte(a[0])); // no range check / shortstring has index 0
with length
writeln(byte(b[0])); // range check / not a shortstring
readln;
end.copy and paste, this on prints the length of b
Implementation detail. And it seems to be wrong on Delphi size, because for reason it…
Dmitry Boyarintsev schrieb am Mo., 13. Aug.
2018, 00:12:
Support for typecasts in untyped constants is by design and sometimes required, e.g. for unsigned 64-Bit values.
Regards,
Sven
On Mon, Aug 13, 2018 at 5:24 AM Sven Barth via fpc-devel <
constant string should be extended up to 255 (256?) characters?
thanks,
Dmitry