Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   UInt64 Zuweisung an Integer, keine Warnung, Waum? (https://www.delphipraxis.net/209938-uint64-zuweisung-integer-keine-warnung-waum.html)

Redeemer 13. Feb 2022 01:17

AW: UInt64 Zuweisung an Integer, keine Warnung, Waum?
 
1073 dürfte an sein, die anderen beiden nicht.

Der schöne Günther 14. Feb 2022 09:26

AW: UInt64 Zuweisung an Integer, keine Warnung, Waum?
 
Nein, keines der drei scheint standardmäßig aktiv.

Vielen Dank, das macht mein Leben fortan deutlich einfacher

Delphi-Quellcode:
program Project1;

{$WARN IMPLICIT_INTEGER_CAST_LOSS ON}
{$WARN IMPLICIT_CONVERSION_LOSS ON}
{$WARN COMBINING_SIGNED_UNSIGNED64 ON}

uses System.SysUtils;

var
   someByte: Byte;
   someShort: ShortInt;
   someInt: Integer;
   someUInt64: UInt64;
begin
   // W1071 Implicit integer cast with potential data loss from 'Byte' to 'ShortInt'
   someByte := ShortInt.MaxValue + 1;
   someShort := someByte;

   // W1072 Implicit conversion may lose significant digits from 'UInt64' to 'Integer'
   someUInt64 := UInt64.MaxValue;
   someInt := someUInt64;

   // W1073 Combining signed type and unsigned 64-bit type - treated as an unsigned type
   someUInt64 := someInt + someUInt64;
end.

KodeZwerg 14. Feb 2022 12:13

AW: UInt64 Zuweisung an Integer, keine Warnung, Waum?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1502132)
Delphi-Quellcode:
{$WARN IMPLICIT_INTEGER_CAST_LOSS ON}
{$WARN IMPLICIT_CONVERSION_LOSS ON}
{$WARN COMBINING_SIGNED_UNSIGNED64 ON}

Dankeschön dafür!

Zitat:

Zitat von Der schöne Günther (Beitrag 1502132)
das macht mein Leben fortan deutlich einfacher

Unbedingt :-D

Der schöne Günther 16. Feb 2022 16:24

AW: UInt64 Zuweisung an Integer, keine Warnung, Waum?
 
Gibt es, bei der Gelegenheit, vielleicht auch noch eine Compiler-Direktive die eine Warnung für nicht initialisierte Rückgabewerte aktiviert?

Also z.B. so etwas hier?

Delphi-Quellcode:
program Project1;

type
   TMyRecord = record
      a, b: Byte;
   end;

function returnRecord(): TMyRecord;
begin
   // do nothing
end;

var
   myRecord: TMyRecord;
begin
   myRecord := returnRecord();
   WriteLn(myRecord.a, ' ', myRecord.b);
   Readln;
end.
Ich würde ja selbst versuchen im DocWiki zu wühlen, aber das liefert mal wieder nur Server Error 500.

himitsu 16. Feb 2022 16:49

AW: UInt64 Zuweisung an Integer, keine Warnung, Waum?
 
Ja, bei kleinen Records funktioniert es garnicht.

Mit Integer, Byte, Char oder Pointer, als Result, da geht es.



Auch für gemangte Typen (ala String, Interface, Variant) und Results größer als Pointer, da ist das Result initialisiert, aus Sicht dieser Methode ... das sieht du nur nicht.

Denn intern wird es dort als
Delphi-Quellcode:
function returnRecord(var Result: TMyRecord);
kompiliert.

Der schöne Günther 16. Feb 2022 17:04

AW: UInt64 Zuweisung an Integer, keine Warnung, Waum?
 
Ja, an die Geschichte kann ich mich irgendwie erinnern.

Ist im Endeffekt aber doch wurscht zu was das kompiliert wird und was durch welche CPU-Register wandert - Fehlermeldungen und Warnungen zu offensichtlich falschem Code sind doch echt nicht zu viel verlangt.

himitsu 16. Feb 2022 19:13

AW: UInt64 Zuweisung an Integer, keine Warnung, Waum?
 
Gab es schon, als Idee.

Im Prinzip muß der Compiler bloß ein "Vergessen" bekommen ... zu Beginn der Methode wird für diese Variable gesagt "du bist nicht initialisiert".


Die führen ja irgendwo eine Liste, welche Variable was für einen Zustand hat und da müssten sie "blos" den Zustand umschreiben und fertig.
Aber ist wohl doch nicht so leicht, so dass es wohl nochmal 20 Jahre dauern wird.

venice2 17. Feb 2022 03:51

AW: UInt64 Zuweisung an Integer, keine Warnung, Waum?
 
Zitat:

Aber ist wohl doch nicht so leicht, so dass es wohl nochmal 20 Jahre dauern wird.
Es ist nun mal so wie es ist. Leider!

Wenn man offensichtliche Fehler findet werden diese von der Gemeinde hier schön geredet bis einem das letztendlich egal ist.
Aufzugeben ist daher die beste Lösung und solche oder ähnliche Probleme irgendwie selbst zu beheben wenn es auf die ein oder andere weise möglich ist.
Es bringt nichts sich darüber auszulassen oder aufzuregen. Bleib Ruhig :-D

freimatz 17. Feb 2022 13:18

AW: UInt64 Zuweisung an Integer, keine Warnung, Waum?
 
Bei der Sache mit "nicht initialisierte Rückgabewerte" ist es kein Fehler. Sie sind ja initialisiert und haben nicht einen zufälligen Inhalt.

Uwe Raabe 17. Feb 2022 13:33

AW: UInt64 Zuweisung an Integer, keine Warnung, Waum?
 
Zitat:

Zitat von freimatz (Beitrag 1502371)
Bei der Sache mit "nicht initialisierte Rückgabewerte" ist es kein Fehler. Sie sind ja initialisiert und haben nicht einen zufälligen Inhalt.

Das ist aus Sicht des Compilers sicher richtig. Für den Entwickler ist das aber nicht direkt ersichtlich. Andererseits, wer programmiert sollte schon wissen was er tut.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Seite 2 von 3     12 3      

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 by Thomas Breitkreuz