[gelöst] RangeCheck Warning QWord

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

[gelöst] RangeCheck Warning QWord

Beitrag von Michl »

Hi,

warum bekomme ich eine RangeCheck Warnung, wenn ich versuche einer QWord Konstanten den maximal möglichen Wert (siehe https://www.freepascal.org/docs-html/rt ... qword.html) zuzuweisen? Ich muss explizit Rangecheck deaktivieren, sonst kann ich das Programm nicht mit -Cr bzw. -CR kompilieren. (Lazarus Trunk, FPC Trunk 64bit, Windows)

Z.B. Test:

Code: Alles auswählen

program Project1;

uses sysutils;

const
  {$R-}
  MaxQWord: QWord = $FFFFFFFFFFFFFFFF;  // Max QWord
  {$R+}

var
  Q: QWord;
  i: Integer;

begin
  Q := 0;
  for i := 0 to 63 do
  begin
    Q := Q shl 1 + 1;
    Writeln(i:2, ' ', Q:20, ' ', IntToHex(Q, 16));
  end;
  ReadLn;
end.   
Zuletzt geändert von Michl am Di 14. Jul 2020, 13:28, insgesamt 1-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: RangeCheck Warning QWord

Beitrag von fliegermichl »

Vermutlich weil Konstanten immer als Integer verwendet werden. Wenn man einen expliziten TypeCast macht, klappt es:

Code: Alles auswählen

const : MaxQWord : QWord = QWord($FFFFFFFFFFFFFFFF);

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: [gelöst] RangeCheck Warning QWord

Beitrag von Michl »

Ja das ist besser. Danke!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten