Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Versionsinformationen werden nicht mit in die Exe übernommen (https://www.delphipraxis.net/182528-versionsinformationen-werden-nicht-mit-die-exe-uebernommen.html)

Uwe Raabe 20. Aug 2024 12:39

AW: Versionsinformationen werden nicht mit in die Exe übernommen
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1539997)
Delphi-Quellcode:
Function test(a:boolean):string;
Begin
  If a then
    result := 'yo'
  else
    result := 'no';
end;
"Das Ergebnis der Funktion ist möglicherweise undefiniert"
Kann man diese Meldung verhindern ohne result zu intialisieren?

Gerade dieses Beispiel erzeugt eben keine Warnung, da ein string-Result immer initialisiert ist. Aber auch mit einem Integer als Rückgabe kommt zumindest unter Delphi 12 keine.

Es gibt aber schon eine Möglichkeit, eine solche Warnung lokal zu unterdrücken ohne die gleich ganz abzuschalten:
Delphi-Quellcode:
{$WARN NO_RETVAL OFF}
Function test(a:boolean):Integer;
Begin
  If a then
    result := 1;
end;
{$WARN NO_RETVAL DEFAULT}

himitsu 20. Aug 2024 14:14

AW: Versionsinformationen werden nicht mit in die Exe übernommen
 
Wobei der Integer in dem Fall des Integers halt wirklich nicht initialisiert sein kann
und beim nichtvorhandenen ELSE zufällig sein kann.

Andersrum ist es schlimmer.
Per se ist der Result als String immer initialisiert, aber nicht in der Funktion, sondern beim Aufrufer, wo er dann z.B. in einer Schleife initial nicht '' sein kann.
Bei gemanagten Typen wird "intern" aus dem Result ein OUT- VAR-Parameter und außerdem sind gemangte Typen immer mit "0" initialisiert. (WideString, LongString, Variant, dynamische Array, Interface und ordentlich geschriebene Custom-Managed-Records)
Delphi-Quellcode:
function Test(a: Boolean): String;
// wird zu
procedure Test(a: Boolean; var Result: String);

Wir hatten im XE einen Fall, wo sich der Compiler in einer Verschachtelung aus Try-Finally, Try-Except, If-Then-Else-If-Then-Else-If-Then-Else-... und Case mit Exit und Abort/Raise durcheinander kam
und nachfolgend meinte die lokale Integervariable könne uninitialisiert sein, drum wurde dort ein :=0 am Anfang eingefügt, was dann D10+ aber anders sah und richtig erkannte, dass bis zur Auswertung es in allen Pfaden gesetzt wird, oder es via Exit/Raise vorher rausspringt.


Im Windows64-Compiler gibt es jetzt teilweise Zustände, wo ein Boolean-Result immer automatisch initialisiert ist scheint ... nja, wenn du schaust immmer, aber eigentlich fast immer, weil du zufällig den einen Abweichenden von Tausenden/Millionen Durchgängen nicht siehst.

QuickAndDirty 20. Aug 2024 14:45

AW: Versionsinformationen werden nicht mit in die Exe übernommen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1540007)
Es gibt aber schon eine Möglichkeit, eine solche Warnung lokal zu unterdrücken ohne die gleich ganz abzuschalten:
Delphi-Quellcode:
{$WARN NO_RETVAL OFF}
Function test(a:boolean):Integer;
Begin
  If a then
    result := 1;
end;
{$WARN NO_RETVAL DEFAULT}

OMG
danke.
außer NORETVAL gibts sicher für jede warnung einen wert oder? Weißt du wo die liste zu finden ist?

himitsu 20. Aug 2024 15:04

AW: Versionsinformationen werden nicht mit in die Exe übernommen
 
Stehen alle in der Hilfe. :angle:

Und wie gesagt, ist DAS hier auch keine Lösung.
Die Lösung ist den Wert zu initialisieren, entweder vorher oder im Else, da die Funktion sonst mehr dem Russisch Roulette entspricht.

dummzeuch 20. Aug 2024 15:49

AW: Versionsinformationen werden nicht mit in die Exe übernommen
 
Zitat:

Zitat von himitsu (Beitrag 1540015)
Stehen alle in der Hilfe. :angle:

Und wie gesagt, ist DAS hier auch keine Lösung.
Die Lösung ist den Wert zu initialisieren, entweder vorher oder im Else, da die Funktion sonst mehr dem Russisch Roulette entspricht.

Naja, es gibt halt Fälle, bei denen der Compiler zu Unrecht mosert. Das ist ganz "toll", wenn sich das von Version zu Version ändert, man also z.B. bei der einen Compiler-Version eine eigentlich unnötige Zuweisung braucht, damit der nicht rummosert, die bei einer anderen Compiler-Version dann aber als unnötig angemosert wird. Innerhalb eines Projekts kann man noch den Code für eine bestimmte Compilerversion "optimieren", aber spätestens bei einer Unit in einer Library, die von mehreren Projekten verwendet wird, ist das nicht mehr so einfach.

Zum Glück sind diese Fälle einigermaßen selten.

Uwe Raabe 20. Aug 2024 16:13

AW: Versionsinformationen werden nicht mit in die Exe übernommen
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1540014)
Weißt du wo die liste zu finden ist?

Steht direkt in der Hilfe zu {$WARN...

Uwe Raabe 20. Aug 2024 16:15

AW: Versionsinformationen werden nicht mit in die Exe übernommen
 
Zitat:

Zitat von himitsu (Beitrag 1540015)
Und wie gesagt, ist DAS hier auch keine Lösung.
Die Lösung ist den Wert zu initialisieren, entweder vorher oder im Else, da die Funktion sonst mehr dem Russisch Roulette entspricht.

Der Code ist absichtlich so gestaltet, dass er definitiv eine Warnung auslöst, die man mit der Direktive abschalten kann.

omnibrain 24. Aug 2024 12:43

AW: Versionsinformationen werden nicht mit in die Exe übernommen
 
In anderen Sprachen gibt es dafür Pragmas, die man einem "angemeckerten" Statement einfach als Art Kommentar nachstellt. Aber mit einem relativ doofen Single Pass Compiler geht das halt nicht.

SearchBot 6. Sep 2024 10:02

AW: Versionsinformationen werden nicht mit in die Exe übernommen
 
Bitte nochmal zurück zum Thema.

Ich habe hier mit Delphi 12.1P1 gerade das gleiche Problem, daß die Versionsinformation nicht korrekt übernommen wird.

Es gibt ja die Auswahl für "debug", für "release" und "für alle Konfigurationen"!
Ich habe sie auf "für alle" eingestellt, Dateiversion und Produktversion auf den selben Wert gesetzt (nur zur Sicherheit), und bei der Ausführung lese ich dann im Programm diesen Wert ein... - da steht dann nur "1.0.0.0", das steht so aber nicht in der eingestellten Konfiguration!

Im Projekt steht das {$R *.res} drin und im Pfad ist nur 1 .res-Datei, die vom Delphi beim compilieren aktuell angelegt wurde (hab sie extra zuvor gelöscht).

Manifest hab ich "Automatisch erzeugen" (für alle Konfigurationen) eingestellt.

Und warum ist die Sprach-ID eigentlich immer auf $409 English eingestellt?
Windows ist Deutsch, IDE ist deutsch, meine Programme sind für deutsche Nutzer - also stelle ich es hier auch deutsch $407 ein.

Aktuell builde ich es als Debug ("alle Konfigurationen" sollte ja trotzdem klappen!?).

Wie bringe ich jetzt Athens dazu, diese in den Projektoptionen wichtigen Daten auch in die Exe hineinzuschreiben?
Oder liegt hier ein weiterer Bug (Feature) vor, weil es durch einen Schalter an irgendeiner irreführend schlecht übersetzen Stelle einen Schalter dafür gibt, zusätzlich zu dem aktivierten "Versionsinformationen in das Projekt übernehmen"??

Uwe Raabe 6. Sep 2024 10:25

AW: Versionsinformationen werden nicht mit in die Exe übernommen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von SearchBot (Beitrag 1540624)
Es gibt ja die Auswahl für "debug", für "release" und "für alle Konfigurationen"!
Ich habe sie auf "für alle" eingestellt

Sobald du in den Versionsinformationen die Debug- oder Release-Konfiguration öffnest, übernimmt die IDE die Einstellungen aus der Alle-Konfiguration, verfolgt aber keine weiteren Änderungen in dieser.

Genau dafür gibt es eine Einstellung im Project Magician, die alle Werte in den abgeleiteten Konfigurationen löscht und die Vererbung damit wieder instand setzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 Uhr.
Seite 4 von 5   « Erste     234 5      

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