|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 26.06.2005, 12:04 Titel: SHARED klappt nicht |
|
|
Hallo!
Mir ist aufgefallen, dass SHARED am Anfang einer SUB/FUNCTION nicht klappt.
Wenn ich z.B.
Code: |
sub wasweisich ()
shared variablex
end sub
|
schreibe, meckert FB:
Zitat: |
Expected: 'END SUB' or 'END FUNCTION', found: 'shared'
|
In der Referenz hab ich nur DIM SHARED gefunden - wurde SHARED alleine etwa abgeschafft?
Oder gibt's einen Ersatz dafür?
Ich hab eigentlich wenig Lust, so ~100 globale Variablen zu benutzen
jb |
|
Nach oben |
|
|
Tomtitom
Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 26.06.2005, 12:28 Titel: |
|
|
also normaler weise gehört es auch zum guten Programmierstil, dass man alle Variablen, die man auch in der Sub weiterverwenden will so einbindet
Code: | sub wasweisich (variablex)
end sub |
so ist alles gleich übersichtlicher und du brauchst auch nicht 100 globale Variablen benutzen |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 26.06.2005, 12:42 Titel: |
|
|
Also, mit SHARED alleine macht man die Variable nicht global, sondern nur für die SUB selber zugänglich,
aber eine SUB mit 10 Parametern aufzurufen ist auch nicht das wahre...
/EDIT: Außerdem kann man die Variablen, die man als Parameter einbindet, mit Hilfe der SUB nicht verändern.
jb |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1874 Wohnort: D59192
|
Verfasst am: 26.06.2005, 12:55 Titel: |
|
|
Hallo,
aus der FB-Referenz
Zitat: | SHARED wird zusammen mit DIM und COMMON eingesetzt, und bewirkt, dass Variablen sowohl vom Hauptmodul als auch innerhalb von SUBs/FUNCTIONs. verfügbar sind.
DIM SHARED bewirkt dabei nur Zugriffsrechte für Prozeduren innerhalb des selben Moduls, während COMMON SHARED die auf Variablenliste von jeder Prozedur und von jedem Modul aus zugegriffen werden kann. |
also
Code: | DIM SHARED variablex AS INTEGER
sub wasweisich ()
variablex = xyz
end sub |
Gruss
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 26.06.2005, 14:27 Titel: |
|
|
Aber dann ist variablex doch global, was mit einem enfachen SHARED zu
Beginn der SUB wasweisich () nicht der Fall gewesen wäre.
jb |
|
Nach oben |
|
|
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 26.06.2005, 17:26 Titel: |
|
|
Mit Shared machst du deine Variablen in jedem Fall Global, da die Bezeichner bei der Übergabe ignoriert werden, und nur die Position in der Shared-Liste zur identifizierung verwendet wird...bei QB verwendet wurde.
In freeBASIC wird SHARED nur noch mit DIM/COMMON verwendet.
Das steht auch in der Referenz, allerdings hat volta die Passage nicht mitkopiert:
freeBASIC Befehlsreferenz hat Folgendes geschrieben: | Unterschiede (zu QB):
Funktioniert nur im Zusammenhang mit
DIM,
REDIM oder
COMMON |
evtl wird in der nächsten Version noch einmal deutlicher erwähnt, dass Zeilen wie
SHARED a, c
nicht mehr unterstützt werden. _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
|
Tomtitom
Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 26.06.2005, 17:32 Titel: |
|
|
jb hat Folgendes geschrieben: | Also, mit SHARED alleine macht man die Variable nicht global, sondern nur für die SUB selber zugänglich,
aber eine SUB mit 10 Parametern aufzurufen ist auch nicht das wahre...
/EDIT: Außerdem kann man die Variablen, die man als Parameter einbindet, mit Hilfe der SUB nicht verändern.
jb |
Also ich sehe kein Problem 10 Parameter zu übergeben, aber vielleicht ist deine Sub dann auch nicht optimal gewählt, wenn du so viele Parameter hast oder einige Variablen, die du fast überall brauchst kannst du ja auch ganz global machen.
Und es werden sehr wohl die Variablen im ganzen Programm geändert, die du per Parameter übergibst, wenn du das nicht willst, musst du immer byval vor den Paramter schreiben. |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 26.06.2005, 19:16 Titel: |
|
|
Erst mal danke für die Antworten!
OK, dann werd ich mich wohl von SHARED verabschieden müssen und die
Variablen mit DIM SHARED global machen oder als Parameter übergeben...
jb |
|
Nach oben |
|
|
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 27.06.2005, 13:40 Titel: |
|
|
Du kannst ja einige Parameter als Optionale Parameter deklarieren:
Code: | DECLARE SUB foo (param AS INTEGER = 1)
foo
foo 2
SUB foo (param AS INTEGER = 1)
PRINT param
END SUB |
Ausgabe:
1
2
Allerdings geht das, soweit ich weiß, nur mit echten Werten, nicht mit Variablen.
Du könntest allerdings standardmäßig die Adresse einer Variablen übergeben:
Code: | DIM param AS INTEGER
DIM other AS INTEGER
DIM addr AS INTEGER
CONST addr = @param
DECLARE SUB foo (BYVAL var AS INTEGER = addr)
param = 5
other = 7
foo
foo other
SUB foo (BYVAL var AS INTEGER = addr)
DIM tmp AS INTEGER
tmp = PEEK(INTEGER, var)
PRINT tmp
END SUB |
Ich denke aber, das das letzte Beispiel nicht wirklich funktionieren wird, da Const keine komplexen Ausdrücke akzeptiert, und Pointeroperatoren schon zu den komplexen Ausdrücken zählen dürfte.... _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 27.06.2005, 13:59 Titel: |
|
|
Oh, ich wusste gar nicht, dass das in freeBASIC geht! Ich dachte, das ginge nur in C/C++
Dusky_Joe hat Folgendes geschrieben: |
Ich denke aber, das das letzte Beispiel nicht wirklich funktionieren wird, da Const keine komplexen Ausdrücke akzeptiert
|
Denke ich auch.
OK, ich seh's ein, bevor ich jetzt anfange, mit Pointern rumzumurksen, definiere ich doch
lieber die wichtigsten Variablen als Globals und übergebe die anderen als Parameter...
jb |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|