AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unverständliche Compiler Warnung

Ein Thema von TurboMagic · begonnen am 10. Dez 2023 · letzter Beitrag vom 10. Dez 2023
 
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#8

AW: Unverständliche Compiler Warnung

  Alt 10. Dez 2023, 13:54
In aktuelleren Delphis sind nun "standardmäßig" die Bereichs- und Überlaufprüfung aktiv (sowie auch die Indexprüfung), für neue Projekte.

Natürlich könnte man das einfach wieder deaktivieren,
aber nicht unbedingt in den Projektoptionen,
sondern vor/um die jeweilige Stelle, wo man "absichtlich" mit einem "Überlauf" arbeitet,
wobei sich hier das Problem auch einfach durch passende TypeCasts beheben lässt.

Delphi-Quellcode:
  if (FCost = 31) then
    rounds := UInt32(MaxLongint)
  else
    rounds := UInt32((UInt32(1) shl FCost) - 1);

  if (FCost = 31) then
    Int32(rounds) := MaxLongint
  else
    Int32(rounds) := (Int32(1) shl FCost) - 1;
Da aber Hashing und Verschlüsselung sowieso per se mit Überläufen arbeitet, ist hier das Deaktivieren der Prüfung, innerhalb dieser Unit, eine legitime Lösung.





Bei deiner Berechnung ist der Typ des Ergebnisses nunmal nicht nur vom Typen der Konstante abhängig, denn nach SHL und - kann ein anderer Typ rauskommen.
Bei einer Subtraction kann theoretisch auch ein negativer Wert raus kommen, weswegen es nach dem - vielleicht zu Int32 werden könnte, selbst wenn die 1 ein UInt32 wäre.

Delphi-Quellcode:
rounds := UInt32(1 shl FCost) - 1;
rounds := UInt32(1 shl FCost - 1);
Ebenfalls MaxLongint ist kein UInt32, also müsste eigentlich MaxLongCardinal bzw. MaxUInt sein , oder einfach High(UInt32) .
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (10. Dez 2023 um 14:03 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz