AGB  ·  Datenschutz  ·  Impressum  







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

global Variablen, Mehrfachdeklaration

Ein Thema von WS1976 · begonnen am 11. Sep 2007 · letzter Beitrag vom 17. Sep 2007
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
WS1976
(Gast)

n/a Beiträge
 
#1

global Variablen, Mehrfachdeklaration

  Alt 11. Sep 2007, 07:16
Hallo,

in zwei units wird zweimal die gleiche Variable deklariert:

Delphi-Quellcode:
unit1;

INTERFACE

uses xxx,yyy;

var
    versa_SB_str : string;
Delphi-Quellcode:
unit2;

INTERFACE

uses xxx,yyy;

var
    versa_SB_str : string;
in einer dritten unit steht dann unter uses:

Delphi-Quellcode:
uses
unit1,unit2;
In dieser dritten ist dann letztendlich überhaupt nicht mehr, bei einer Zuweisung, klar welche Variablbe "versa_SB_str" gemeint ist.
Ich weiss, dass das katastrophaler Programmierstil ist, aber ich habe ein altes Programm zum Überarbeiten bekommen und weiss an der Stelle eigentlich nicht mehr weiter.
Mit D2 kann ich das Ganze kompilieren und läuft. Mit D7 bringt er alles durcheinander.
Beide Compiler bringen keine Fehlermeldung!
Gibts ein Tool oder eine Möglichkeit solche Doppeldeklarationen zu erkennen?
Kann mir jemand helfen?
Grüsse Rainer
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#2

Re: global Variablen, Mehrfachdeklaration

  Alt 11. Sep 2007, 07:26
Hallo,

ich hatte mal das Problem, das TBitmap auch zweimal deklariert ist. Der Compiler nimmt sich die Deklaration, die in deiner Uses-Anweisung als erstes auftaucht (bei dir Unit1), glaube ich zumindest. Du kannst allerdings auch genau auf die Deklaration zugreifen, die du möchtest mit

Delphi-Quellcode:
unit1.versa_SB_str
unit2.versa_SB_str
Ob du solche Mehrfachdeklarationen auch anders erkennen kannst weiß ich leider nicht.

Gruß,

Guido
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#3

Re: global Variablen, Mehrfachdeklaration

  Alt 11. Sep 2007, 07:36
Hallo,

danke für die Antwort.
Die Version unit1.variable ist mir bekannt, nur gemacht hat mein Vorgänger das nirgends.
Mein Beispiel ist auch nur die Spitze des Eisbergs.
Es geht in mehr als 100 Units kreuz und quer durcheinander.
Sieht irgendjemand einen Sinn in einer solchen Doppeldeklaration? Kann ich eine Variable "absolut global" machen, sodass der Compiler merkt, dass es hier eine Doppeldeklaration gibt?
Eigentlich müsste man daraus eigentlich schliessen, dass es in Delphi nur unit-globale Variablen gibt und keine wirklich globalen.

Grüsse
Rainer
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#4

Re: global Variablen, Mehrfachdeklaration

  Alt 11. Sep 2007, 16:16
Zitat von WS1976:
Hallo,

...Eigentlich müsste man daraus eigentlich schliessen, dass es in Delphi nur unit-globale Variablen gibt und keine wirklich globalen.

Grüsse
Rainer
Hallo Rainer,

ohne uses ist in Delphi nichts sichtbar, in der dpr-Datei kann man zwar Variablen definieren, aber die kann man in anderen Units nicht verwenden.

Die sauberste Methode ist, eine Unit "globals" o.ä. anzulegen, alles globale dort rein zu packen (auch z.B. Prozeduren) und die in allen anderen als erste unter uses aufzuführen.

Doppeldeklarationen sind für Delphi ein Problem, u.a. wenn man eine Deklaration in eine andere Unit verlegt. Ich behelfe mir mit der Suchfunktion "in allen Projektdateien suchen".

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: global Variablen, Mehrfachdeklaration

  Alt 11. Sep 2007, 16:41
Die sauberste Variante ist eher soweit wie möglich auf globale Variablen zu verzichten. Dieses Beispiel zeigt sehr schön warum Globale so ungern gesehen sind bei den meisten Programmierern.
Sinn von solchen Doppeldefinitionen war eventuell das man nicht immer die eine Unit einbinden muss nur weil man die Constante daraus braucht. Also definiert man sie sich neu.
Pfofessional ist das natürlich nicht, eine ordentliche Planung sorgt eigentlich dafür das Constanten nur an einer Stelle definiert werden und nicht mehrfach.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#6

Re: global Variablen, Mehrfachdeklaration

  Alt 11. Sep 2007, 17:00
Im Grßen und Ganzen stimme ich dem zu. Aber bei Basisdefinitionen geht das manchmal nicht. Zum Beispiel bei der Definiton der Farbwerten oder Styletypen ist es sinnvoll die Systemweit zu definieren. In dem Fall würde ich ein Teil der Unitbezeichnung in den Anfang des Variablennamens legen. Sonst neige ich dazu als zentrale Speicherstelle ein MemImi-Objekt oder einen MemTree zu nehmen und dort zentral alles abzulegen.

Grüße // Martin


PS: Die Verwaltung von Optionseinstellungen scheinen bisher in den meisten Delphianwendungen etwas leidlich gelöst zu sein.
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#7

Re: global Variablen, Mehrfachdeklaration

  Alt 11. Sep 2007, 19:44
Zitat von SirThornberry:
Die sauberste Variante ist eher soweit wie möglich auf globale Variablen zu verzichten. Dieses Beispiel zeigt sehr schön warum Globale so ungern gesehen sind bei den meisten Programmierern.
Sinn von solchen Doppeldefinitionen war eventuell das man nicht immer die eine Unit einbinden muss nur weil man die Constante daraus braucht. Also definiert man sie sich neu.
Pfofessional ist das natürlich nicht, eine ordentliche Planung sorgt eigentlich dafür das Constanten nur an einer Stelle definiert werden und nicht mehrfach.
Hello Sir,

das Gegenteil ist der Fall: das Problem ist nicht, dass jemand globale Variable verwendet, sondern dass Delphi keine kennt. Das geht ja auch aus deinem 2. Satz hervor - bei echten globalen Variablen dürfte es eben keine unangemeckerten Doppeldefinitionen geben. Wenn ich eine Umrechnungskonstante mm2inch definiere, dann will ich selbstverständlich, dass jedes kleinste Stück meiner Software genau diese Konstante benutzt - was soll daran so böse sein, dass man es verbieten muss? Ist sowieso lächerlich, weil es Software ohne globale Variablen garnicht gibt - schreib mal ein Delphi-Programm ohne Application. Auch wenn man alles dynamisch in den Speicher lädt, was sowieso eher unsicher ist, irgendwo muss ja alles anfangen.

Das Problem ist also, dass es Doppeldefinitionen gibt, die es für Globales garnicht geben dürfte, und das ist ein reines Delphi-Problem. Selbst jeder Assembler meldet sowas als Fehler.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: global Variablen, Mehrfachdeklaration

  Alt 11. Sep 2007, 19:47
@Reinhard Kern: Es geht ohne ein globales ApplicationObject aber das wäre jetzt eine Grundsatzdikussion und hat mit deinem Problem nichts zu tun.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#9

Re: global Variablen, Mehrfachdeklaration

  Alt 12. Sep 2007, 05:16
Wenn ich solche "globalen" Variablen brauche, mache ich es ungefähr so:

Delphi-Quellcode:
unit MyGlobals;

interface

type
  ...

const
  ...

var
  ...;
  MyGlobVar: String;

implementation

end.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, ..., MyGlobals;

type
  ...

implementation

procedure TForm1.FormCreate (...);
begin
  MyGlobVar := 'Foo';
end;

...

end.
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, ..., MyGlobals;

type
  ...

implementation

procedure TForm2.FormCreate (...);
begin
  ShowMessage (MyGlobVar);
end;

...

end.
Also eine Unit anlegen, in der solche Sachen gesammelt werden (Types, Consts, Vars) und diese Unit dann in den jeweiligen Units einbinden, wo du die Variablen / Typen / ... brauchst.
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#10

Re: global Variablen, Mehrfachdeklaration

  Alt 12. Sep 2007, 06:01
Hallo nuclear,

solange du ein neues Projekt hast mach das auch so. Ich hab aber nach wie vor das Problem, dass mein Vorgänger alle möglichen Variablen an alle möglichen Stellen verteilt hat.
Es ist extrem mühsam alle Variablen zu suchen und auch Doppeldeklarationen aufzudecken.
Das Projekt umfasst ca 320000 Zeilen Code.
Hat jemand eine Ahnung ob es vielleicht irgendein Tool gibt mit dem mir geholfen wird?
Wenn nicht schreib ich mir selbst eins.

Fazit:
Wenn schon globale Variablen, dann übersichtlich in eine Unit!

Grüsse
Rainer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 05:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz