![]() |
Warum warnt hier der Compiler?
Hallo,
für folgende Zeile warnt der Delphi Compiler mittels W1024, dass vorzeichenlose und behaftete Typen verglichen werden:
Delphi-Quellcode:
FBuf ist dabei ein Array fester Länge von UInt8 Feldern.
FBuf[0] := b or ((FCalcAuthenticationTagLength-2) shl 2) or (L-1);
b ist ein UInt8 FCalcAuthenticationTagLength ist ein UInt32 L ist ein UInt16 Wenn das "or (L-1)" testhalber entfernt wird, ist die Warnung weg. Dass FCalcAuthenticationTagLength nicht größer als 16 werden darf/kann, kann der Compiler nicht wissen. |
AW: Warum warnt hier der Compiler?
Der Compiler kann nicht wissen, ob L immer größer als 0 ist. Entsprechend erweitert er den Datentyp für das Ergebnis auf vorzeichenbehaftet, weil auch -1 ein mögliches Ergebnis ist.
Wenn dies in deiner Logik klar ist, kannst du das Ergebnis von L - 1 auf UInt16 casten, damit die Warnung verschwindet. Vermute ich, ich habe es nicht getestet. |
AW: Warum warnt hier der Compiler?
Hallo,
so was in der Art dämmerte mir inzwischen auch. Ich werde mir das mal morgen anschauen... |
AW: Warum warnt hier der Compiler?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 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