On 13/08/2018 00:12, Dmitry Boyarintsev wrote:
On Sun, Aug 12, 2018 at 5:40 PM Bart <bartjun...@gmail.com
<mailto:bartjun...@gmail.com>> wrote:
const
x = ShortString('abc');
begin
writeln(SizeOf(x));
end.
Delphi (7) prints 256, fpc prints 3.
Is that a bug or an implementation detail?
Implementation detail.
And it seems to be wrong on Delphi size, because for reason it assigns
a type to a (non-typed) constant.
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.
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel