AGB  ·  Datenschutz  ·  Impressum  







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

Warum warnt hier der Compiler?

Ein Thema von TurboMagic · begonnen am 5. Mai 2025 · letzter Beitrag vom 7. Mai 2025
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.055 Beiträge
 
Delphi 12 Athens
 
#1

Warum warnt hier der Compiler?

  Alt 5. Mai 2025, 19:37
Hallo,

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

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.
Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.972 Beiträge
 
Delphi 12 Athens
 
#2

AW: Warum warnt hier der Compiler?

  Alt 5. Mai 2025, 20:07
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.055 Beiträge
 
Delphi 12 Athens
 
#3

AW: Warum warnt hier der Compiler?

  Alt 5. Mai 2025, 20:43
Hallo,

so was in der Art dämmerte mir inzwischen auch.
Ich werde mir das mal morgen anschauen...
Grüße
TurboMagic
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.495 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Warum warnt hier der Compiler?

  Alt 7. Mai 2025, 07:14
Hallo,

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

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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:07 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