W1012 L'expression constante dépasse les limites de sous-étendue

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Messages d'erreur et d'avertissement (Object Pascal) - Index


Ce message apparaît si une conversion effectuée était légale mais est maintenant illégale, en raison de l'introduction de larges types non signés dans Object Pascal après la release Object Pascal 4.

Par exemple :

 var
    x: Integer;
 const
    y = Cardinal(MaxInt) + 1;
 begin
    x := y;
    Writeln(y); // writes 2147483648
    Writeln(x); // writes -2147483648
 end.

Avant que Cardinal ne soit défini comme un integer 32 bits non signé (antérieur à Object Pascal 4), Cardinal était un integer 31 bits non signé d'étendue 0..MaxInt. Ainsi, chaque valeur de l'étendue de Cardinal tenait dans un Integer. Après Object Pascal 4, Cardinal possède l'étendue complète 32 bits non signée, 0..$FFFFFFFF. La moitié supérieure de son étendue n'est pas convertissable en Integer ; les très hautes valeurs de Cardinal (supérieures à MaxInt) seront ainsi converties en nombres Integer négatifs, selon les différences d'interprétation des entiers signés (complément à deux) et des entiers non signés.

Voir aussi