Achtung bei Variablen, die als "Static" gekenntzei

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Achtung bei Variablen, die als "Static" gekenntzei

Beitrag von Xaby »

Code: Alles auswählen

Procedure.l Statc()
  Static c.l=0
    c+1
    ProcedureReturn c
EndProcedure
  
Procedure.l Statx()
  Static c.l
  c=0
  c+1
  ProcedureReturn c
EndProcedure

For i=1 To 10
  Debug Statc()
Next
For i=1 To 10
  Debug Statx()
Next
:allright:
Kinder an die Macht http://scratch.mit.edu/
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

öhm.. sorry, wo ist die relevanz deines Postings?

das verhalten ist sowas von gnadenlos selbstverständlich,
das muss jedem klar sein, der STATIC verwenden will.

außerdem, wenn das ein Hinweis für Anfänger sein soll,
hättest du das eher in CT&T posten sollen....

und wenn, dann darfst du auch nen absatz dazu schreiben...
(das ich das mal zu Xaby sage... *rotstift und kalender rauskram*)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Was gibt es denn außer Static, was man in Prozeduren verwenden kann?

War ne Fehlerquelle bei mir. Ich dachte, wenn ich

Static c.l=0

schreibe, dass C automatisch auf Null gesetzt wird, wenn ich die Prozedur aufrufe. Schien aber nicht so.

Wie man das Problem lösen kann, hab ich ja selbst rausgefunden.
Aber für Tipps und Tricks wäre es wohl nicht Tricksig genug.

Als Anfänger würde ich gern wissen, was es außer Static noch gibt, was man für EnableExplizit nutzen kann.

:allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Dank euch, irgendwie war mir ja so, aber die Hitze auf den Abend :oops:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Sry, habs gelöscht bevor ich dein posting las, dachte es wäre doch falsch,
weil du drückst dich auch immer so unverständlich aus (jedenfalls für mich)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Das ist Sinnlos :

Code: Alles auswählen

  Static c.l
  c=0 
hier wird c beim initialisieren auf 0 gesetzt :

Code: Alles auswählen

  Static c.l = 0
um Variablen in einer Procedure von aussen zu schuetzen :

Code: Alles auswählen

  protected c.l
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

genau.

wenn du eine variable bei jedem aufruf gleich initialisiert haben willst,
benötigst du Protected.

Static sorgt dafür, dass der wert vom vorherigen Funktionsaufruf erhalten bleibt,
also ist es eigentlich logisch, dass eine initialisierung nur beim ersten aufruf greift.
sonst wäre ja die verwendung von Static sinnlos.
man müßte keinen speicher die ganze laufzeit blockieren,
wenn man beim nächsten aufruf eh nen festen startwert haben will.
Static dient ja eben dazu, um den wert zwischen zwei aufrufen zu erhalten.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten