Was ist der Unterschied zwischen GLOBAL und SHARED?

Für allgemeine Fragen zur Programmierung mit PureBasic.
horst
Beiträge: 70
Registriert: 08.09.2004 19:33
Wohnort: München
Kontaktdaten:

Beitrag von horst »

@DarkDragon
> Das klingt irgendwie so als ob es nur für die Kommunikation zwischen Prozeduren gedacht ist

Naja, eine Prozedur kann sich logischerweise auch selbst (immer wieder) an der Benutzung dieser Variablen beteiligen, ob sie nun woanders verändert wird oder nicht. ("shared" haben wir auch genommen, als es noch kein "static" gab.)

@Kaeru Gaman
> da muss ich jetzt aber mal auf die boardsuche hinweisen

Hinweis auf Boardsuche ist gut. Link ist besser :wink:

Andererseits, wenn es in der PB-Hilfe eine zusammenfassende Übersicht der verschiedenen Nutzungsbereiche (global, shared, static, protected, parameter, default/lokal) mit präzisen Aussagen gäbe, dann würde sich viel Fragerei erübrigen.
horst
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Wie meinst du das in der Hilfe mit präzisen Aussagen?
http://www.purearea.net/pb/german/manua ... rence.html
Unter Prozeduren Unterstützung ist das doch vorhanden und auch
erklärt.
Prozeduren Unterstützung

Global
...
Protected
Shared
Static
Wenn das noch unverständlich ist, sollte Andrè darüber informiert werden
was er in der neuen Hilfe zu PB4 ändern bzw. anpassen sollte, damit
es verstanden wird. 8)

MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Hallo und danke für eure zahlreichen Beiträge.

Ich habe die Boardsuche benutzt aber zu "unterschied global shared" nichts gefunden.
Falko hat geschrieben:Fehlt nur noch der Vergleich zu Protected .
Aber eigendlich steht das alles ja schön in der PB-Hilfe beschrieben drinne, so das man hätte vorher gucken können
Protected? Das weiß ich, was das ist *augenzwinker*
Aber meinst du, ich habe nicht in der Hilfe nachgeschaut, was Shared bewirkt?
Ich werde aus diesem Satz einfach nicht schlau:
PureBasic Hilfe hat geschrieben:Shared erlaubt den Zugriff auf eine Variable innerhalb der Prozedur.
Wenn ich also eine Variable share, dann hat shared laut horst die gleiche Wirkung wie Global. Denn eine globalisierte Vairable ist ja auch in allen Proceduren und
horst hat geschrieben:und zusätzlich im Hauptprogramm
verfügbar.

@ horst: Danke für dienen Beitrag. Ist wirklich gut erklärt, aber ich weiß, das "to share" "teilen" heißt :-)

@ Kaeru, wie gesagt, ich habe die Suche benutzt, aber nichts gefunden.

@ Falko's letzter Beitrag:
Wie gesagt, ich werde aus dem Satz "Shared erlaubt den Zugriff auf eine Variable innerhalb der Prozedur." nicht schlau, ich streite auch nicht ab, das ich evtl. ein Brett vor dem Kopf habe, obowhl ich glaube, keines zu haben.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm.. der begriff "unterschied" war wohl zu viel...

http://www.purebasic.fr/german/viewtopic.php?t=8298
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

Hier wurde es dikutiert.

Der Knackpunkt ist der, dass das Hauptprogramm ohne das Schlüsselwort Shared auf eine unter gleichem Namen aber mit Shared in Prozeduren vereinbarte Variable zugreift.
Der Sanitesse halber sollte auch im Hauptprogramm die Verwendung von Shared erforderlich sein, wenn man die gleiche Variable teilen will.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
horst
Beiträge: 70
Registriert: 08.09.2004 19:33
Wohnort: München
Kontaktdaten:

Beitrag von horst »

@AND51
> PureBasic Hilfe hat folgendes geschrieben:
> Shared erlaubt den Zugriff auf eine Variable innerhalb der Prozedur.

Dieser Satz in der Hilfe ist nicht besonders glücklich formuliert.

> .. Wenn ich also eine Variable share, dann hat shared laut horst die gleiche Wirkung wie Global.

.. für jede Prozedur, die ausdrücklich (per "Shared"-Erklärung) an der Benutzung der Variablen beteiligt ist, und (stillschweigend) für das Hauptprogramm; für alle anderen Prozeduren natürlich nicht.

> ...aber ich weiß, das "to share" "teilen" heißt ..

Und zwar nicht im Sinne von "aufteilen" sondern von "gemeinsam haben"..
horst
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Kaeru Gaman hat geschrieben:hm.. der begriff "unterschied" war wohl zu viel...
Ich bin halt ein direkter Typ :lol: Ich will's imemr ganz genau haben. Ist entweder traurig oder -was ich natürlich denke- zufall, dass auf den 4 Seiten voller Posts nicht ein einz'ges Mal das Wort "unterschied" vorkommt, sodass ich es nicht finden konnte :|

@ horst: Ja auch das weiß ich, das ist meinersets ein bisschen unglücklich ausgedrückt. Aber du siehst, diesen ungllücklich formulierten Satz versteht man nicht immer so ganz, ne? :cry:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

AND51 hat geschrieben:Wenn ich also eine Variable share, dann hat shared laut horst die gleiche Wirkung wie Global. Denn eine globalisierte Vairable ist ja auch in allen Proceduren und
horst hat geschrieben:und zusätzlich im Hauptprogramm
verfügbar.
Eben nicht! Shared ist nicht für alle Prozeduren, sondern nur die, die eine Variable innerhalb der Prozedur als Shared deklariert haben sowie für das Hauptprogramm.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Code: Alles auswählen

xyz.l=5
Procedure a()
   Shared xyz.l
EndProcedure

Procedure b()
   Shared xyz.l
EndProcedure

Procedure c()
   Shared xyz.s
EndProcedure

Procedure d()

EndProcedure
Also hier ist xyz.l, nur im Hauptprogramm, a() und b() verfügbar, gelle?

Ich hoffe, wenn ihr das mit JA beantwortet, habe ichs endlich verstanden *schwitz*
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

solange du in der procedure c das shared nicht in protected änderst (oder weg lässt), erhältst du einen compiler error, weil der bezeichner "xyz" schon für eine variable anderen typs vergeben ist.
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten