AGB  ·  Datenschutz  ·  Impressum  







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

TStringList x64 nicht nil

Ein Thema von venice2 · begonnen am 11. Feb 2020 · letzter Beitrag vom 12. Feb 2020
Antwort Antwort
Seite 1 von 2  1 2      
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

AW: TStringList x64 nicht nil

  Alt 12. Feb 2020, 11:25
Zitat:
Doch, gewarnt wurde da schon immer, wenn du sowas nicht initialisierst,
Oder wenn man Warnungen abgeschaltet hat Glaube ich.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.691 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: TStringList x64 nicht nil

  Alt 12. Feb 2020, 11:30
Wie ist denn OpenFile deklariert? Ist List evtl. ein var Parameter? Wenn ja, warnt der Compiler nicht.
Thomas Mueller
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: TStringList x64 nicht nil

  Alt 12. Feb 2020, 11:35
Wie ist denn OpenFile deklariert? Ist List evtl. ein var Parameter? Wenn ja, warnt der Compiler nicht.
Dem ist so.
OpenFile(ip_FileName: AnsiString; var List: TStringList)

Geändert von venice2 (12. Feb 2020 um 11:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: TStringList x64 nicht nil

  Alt 12. Feb 2020, 11:58
Dann gibts natürlich keine Warnung, weil der Compiler davon ausgeht, dass die Liste ggf. in der Funktion angelegt und über den Var-Parameter zurückgegeben wird.
Falls du die Liste in der Funktion nicht erstellst oder komplett neu zuweist ist der var Parameter falsch und sollte weg.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#5

AW: TStringList x64 nicht nil

  Alt 12. Feb 2020, 12:08
Zitat:
Falls du die Liste in der Funktion nicht erstellst oder komplett neu zuweist ist der var Parameter falsch und sollte weg.
Danke für den Hinweis aber er ist nicht falsch und kann auch nicht weg.

Es hat schon einen Grund warum beim initialisieren meiner Klasse die Liste NIL sein muss.
Sie wird erst gefüllt wenn OpenFile von außerhalb meiner Klasse aufgerufen wird.

Darum ging es aber auch nicht sondern um die Frage warum in x64 nicht NIL und unter x86 = NIL ohne List zu initialisieren.

Denke die korrekte Antwort kommt von @hoika. Damit ist die Frage für mich beantwortet.

Zitat:
mit Optimierung=nil
ohne Optimierung<>nil
Zitat:
@hoika Halo,
müßig ist es nicht.

Es lesen ja auch Anfänger mit (hoffentlich).

Und man sollte schon alle Compiler-Warnungen beheben.
Richtig!
Nur in meinem Fall gibt es keine Warnung sagte ich schon. Warum wurde auch schon geklärt.

Geändert von venice2 (12. Feb 2020 um 12:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#6

AW: TStringList x64 nicht nil

  Alt 12. Feb 2020, 13:30
Sie wird erst gefüllt wenn OpenFile von außerhalb meiner Klasse aufgerufen wird.
Ein Befüllen einer TStringList ist auch möglich, wenn diese als const an eine Funktion übergeben wird. Nur ein Zuweisen einer neuen Instanz benötigt var (oder out ). Eine Variable auf eine TStringList hält doch nur einen Pointer auf einen Speicherbereich, was die Veränderung des Speicherbereichs (=Inhalte der TStringList) aber nicht verhindert.

Kurz gesagt: Überleg dir ganz genau, ob du das var wirklich brauchst.

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: TStringList x64 nicht nil

  Alt 12. Feb 2020, 12:25
Dann gibts natürlich keine Warnung, weil der Compiler davon ausgeht, dass die Liste ggf. in der Funktion angelegt und über den Var-Parameter zurückgegeben wird.
Und das Verhalten ist auch schlichtweg falsch - denn var ist ein in/out Parameter - das sollte für eine Warnung vom Compiler sorgen. Nur bei out darf semantisch egal sein, was vorher drin steht.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.691 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: TStringList x64 nicht nil

  Alt 12. Feb 2020, 12:35
Dann gibts natürlich keine Warnung, weil der Compiler davon ausgeht, dass die Liste ggf. in der Funktion angelegt und über den Var-Parameter zurückgegeben wird.
Und das Verhalten ist auch schlichtweg falsch - denn var ist ein in/out Parameter - das sollte für eine Warnung vom Compiler sorgen. Nur bei out darf semantisch egal sein, was vorher drin steht.
Das mag zwar theoretisch so sein, aber praktisch verwenden viele immernoch var statt out (insbesondere auch Tools, die Code erzeugen). Wenn der Compiler da immer rummosern würde, wäre das kontraproduktiv.
Thomas Mueller
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#9

AW: TStringList x64 nicht nil

  Alt 12. Feb 2020, 12:39
Zitat:
aber praktisch verwenden viele immernoch var statt out
Dann programmieren sie falsch.
@Steve hat da schon recht.

Benötige ich ein und Ausgabe dann verwende ich 'var' ansonsten den entsprechenden Parameter bei nur Ausgabe out.
Un wenn der Compiler hier keine Unterschiede macht (Warnungen betreffend) dann ist da was faul.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.388 Beiträge
 
Delphi 12 Athens
 
#10

AW: TStringList x64 nicht nil

  Alt 12. Feb 2020, 12:39
Falls du die Liste in der Funktion nicht erstellst oder komplett neu zuweist ist der var Parameter falsch und sollte weg.
Dafür ist OUT da.
Bei VAR kommt auch eine Meldung, denn die Variable muß initialisiert sein, damit der Code in der Funktion prüfen kann, ob dort etwas übergeben wurde. (if not assigned then create)
Bei OUT geht der Compiler davon aus, dass nichts übergeben wird und somit muß die Variable auch nicht initiaisiert sein.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:05 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