Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

SHARED klappt nicht

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 26.06.2005, 12:04    Titel: SHARED klappt nicht Antworten mit Zitat

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 durchgeknallt

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 26.06.2005, 12:28    Titel: Antworten mit Zitat

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 mit den Augen rollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 26.06.2005, 12:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 26.06.2005, 12:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 26.06.2005, 14:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 26.06.2005, 17:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 26.06.2005, 17:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 26.06.2005, 19:16    Titel: Antworten mit Zitat

Erst mal danke für die Antworten! lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 27.06.2005, 13:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 27.06.2005, 13:59    Titel: Antworten mit Zitat

Oh, ich wusste gar nicht, dass das in freeBASIC geht! Ich dachte, das ginge nur in C/C++ verwundert

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz