Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Warum warnt hier der Compiler? (https://www.delphipraxis.net/217137-warum-warnt-hier-der-compiler.html)

TurboMagic 5. Mai 2025 19:37

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[0] := b or ((FCalcAuthenticationTagLength-2) shl 2) or (L-1);
FBuf ist dabei ein Array fester Länge von UInt8 Feldern.
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.

jaenicke 5. Mai 2025 20:07

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.

TurboMagic 5. Mai 2025 20:43

AW: Warum warnt hier der Compiler?
 
Hallo,

so was in der Art dämmerte mir inzwischen auch.
Ich werde mir das mal morgen anschauen...

freimatz 7. Mai 2025 07:14

AW: Warum warnt hier der Compiler?
 
Zitat:

Zitat von TurboMagic (Beitrag 1548463)
Hallo,

für folgende Zeile warnt der Delphi Compiler mittels W1024, dass vorzeichenlose und behaftete
Typen verglichen werden:

Delphi-Quellcode:
FBuf[0] := b or ((FCalcAuthenticationTagLength-2) shl 2) or (L-1);

So generell wenn man in einer Zeile ein Problem hat, dann kann man zuerst mal die Zeile aufteilen in mehrere. Dann warnt der Compiler zwar immer noch, aber man sieht besser in welchem Teil.


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