Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi lokale Variablen mit globaler Lebensdauer? (https://www.delphipraxis.net/49592-lokale-variablen-mit-globaler-lebensdauer.html)

sniper_w 13. Jul 2005 13:23


lokale Variablen mit globaler Lebensdauer?
 
Zitat:

...zum Thema "globale Variablen vermeiden": gibts denn in Object Pascal lokale Variablen mit globaler Lebensdauer? (C/C++ Stichwort "static")

mfg
Ich habe damasl diese Frage auf meine Festplatte geschpeichert, wollte es später auch beantworten. Da ich erst jetzt diese Frage wieder gefunden habe, hier ein Antwort: Ja.
Und zwar so(Delphi 6):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
{$IFOPT J-}
  {$DEFINE restore_me}
{$ENDIF}
{$IF DEFINED (restore_me)}
  {$J+}
{$IFEND}
const D:Integer = 0;
{$IF DEFINED (restore_me)}
  {$J-}
{$UNDEF restore_me}
{$IFEND}
begin
  Inc(D);
  Caption := IntToStr(D);
end;
Für weitere Erklärungen, siehe OH.

Luckie 13. Jul 2005 13:31

Re: lokale Variablen mit globaler Lebensdauer?
 
Nein, das ist ein Missbrauch von Konstanten und entspricht nicht dem Schlüsselwort static von C/C++. Das funktioniert übrigens auch nur noch, weil es Borland aus Kompatibilitätsgründen nicht rausgeschmissen hat. Als Programmierer sollte man so etwas tunlichts vermeiden, da es einfach nicht sauber programmiert ist, denke ich.

Dax 13. Jul 2005 13:34

Re: lokale Variablen mit globaler Lebensdauer?
 
Ums direkt zu sagen: Lokale Variablen mit Globaler Lebensdauer sind größtmöglicher Schwachsinn. Da kannst du auch gleich globale Variablen nehmen, was genauso schwachsinnig ist ;)

Robert Marquardt 13. Jul 2005 13:43

Re: lokale Variablen mit globaler Lebensdauer?
 
Das ist nur Schwachsinn wenn man es wie im Titel formuliert.
Richtig heisst es globale Variablen mit lokaler Sichtbarkeit. Das ist es was C hat und Delphi nicht.
Variablen in der implementation section sind aber fast genauso gut.

Sprint 13. Jul 2005 13:52

Re: lokale Variablen mit globaler Lebensdauer?
 
Eine andere Möglichkeit um auf die Compiler Direktive WRITEABLECONST ($J) zu verzichten:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  Counter: Integer = 0;
begin

  Inc(PInteger(@Counter)^);
  Caption := IntToStr(Counter);

end;

NicoDE 13. Jul 2005 13:55

Re: lokale Variablen mit globaler Lebensdauer?
 
Zitat:

Zitat von Sprint
Eine andere Möglichkeit um auf die Compiler Direktive WRITEABLECONST ($J) zu verzichten:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  Counter: Integer = 0;
begin

  Inc(PInteger(@Counter)^);
  Caption := IntToStr(Counter);

end;

Eine schlechte Idee schlägt die nächste :)

sniper_w: dein Quellcode macht Probleme wenn 'restore_me' vorher bereits definiert wurde...

Sprint 13. Jul 2005 14:00

Re: lokale Variablen mit globaler Lebensdauer?
 
Zitat:

Zitat von NicoDE
Eine schlechte Idee schlägt die nächste

Soll nur zeigen, das sowas möglich ist...

s.h.a.r.k 13. Jul 2005 14:02

Re: lokale Variablen mit globaler Lebensdauer?
 
Mal ne Frage: Zu was brauche ich das?! Ich kann in Delphi doch globale und lokale Variablen festlegen wie ich will und ich weiß doch von vorne rein, was global und lokal sein soll?! Was bringt mir das dann?

sniper_w 13. Jul 2005 14:06

Re: lokale Variablen mit globaler Lebensdauer?
 
Zitat:

Als Programmierer sollte man so etwas tunlichts vermeiden, da es einfach nicht sauber programmiert ist, denke ich.
Zitat:

Ums direkt zu sagen: Lokale Variablen mit Globaler Lebensdauer sind größtmöglicher Schwachsinn. Da kannst du auch gleich globale Variablen nehmen, was genauso schwachsinnig ist
Darüber lässt sich diskutieren. Aber das wollte ich ja nicht. Ich wollte lediglich diese Möglichkeit zeigen. Ob das richtig ist, schön oder nicht, ist eine andere Sache.

sniper_w 13. Jul 2005 14:08

Re: lokale Variablen mit globaler Lebensdauer?
 
Zitat:

Zitat von NicoDE
sniper_w: dein Quellcode macht Probleme wenn 'restore_me' vorher bereits definiert wurde...

Dann musst du halt aufpassen ;). Anstatt 'restore_me', nimm 'TForm1_Button1Click_Sender_TObject_'


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:49 Uhr.
Seite 1 von 6  1 23     Letzte »    

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