Jonas Maebe wrote:
On 25 Jun 2009, at 19:58, Ruediger Hahn wrote:
I am just wondering if this is a bug: Can anyone tell me why I get a
"range check error while evaluating constants" with the following
simple program:
<code>
program Project1;
const
MyVar : UInt64 = $FFFFFFFFFFFFFFFF; // 4 x 2 Bytes or 4 Words
begin
end.
</code>
The reason is that $FFFFFFFFFFFFFFFF is parsed as an int64 by FPC. As
a result it equals -1, and -1 is not a valid uint64 value.
Ah yes, now I see. In Delphi it is quite the opposite: There I get a
warning when I try to assign this value to an Int64: "Constant
expression violates subrange bounds". Unfortunately it took me some
hours to solve this problem because Lazarus by default has range
checking enabled (-Cr), so I got an error instead of a warning.
Furthermore IMHO hex values _by_ _default_ should be interpreted as
positive values. But that might be a matter of taste.
So what do I have to do then? It seems that a cast is the best solution:
<code>
MyConst : UInt64 = UInt64($FFFFFFFFFFFFFFFF);
</code>
Am I right?
Ruediger
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal