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:

Frage zu Shared, Var-len Strings

 
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
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 09.02.2009, 19:03    Titel: Frage zu Shared, Var-len Strings Antworten mit Zitat

Hallo

Warum funktioniert folgender Code:
Code:
DIM test(0 to 4) AS STRING = { "Hallo", "Welt", "Test", "QB", "FreeBasic" }

und der folgende nicht?
Code:
DIM SHARED test(0 to 4) AS STRING = { "Hallo", "Welt", "Test", "QB", "FreeBasic" }


Wenn man die Kurzschreibweise auflöst funktioniert es:
Code:
DIM test(0 to 4) AS STRING
test(0) = "Hallo"
test(1) = "Welt"
test(2) = "Test"
test(3) = "QB"
test(4) = "FreeBasic"


Kann es sein, dass ich ein Shared-String-Array variabler Länge nur so mit Werten befüllen kann? Wenn Ja, wieso?

LG,
St_W
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 09.02.2009, 19:36    Titel: Antworten mit Zitat

weil der compiler das ganze dynamisch umsetzen muss (alloc bedingt), und nicht in den stack packen kann, wie er er machen würde, wenn es statisch wär. Dynamische werden zwar auch teilweise in den stack gepumpt, aber da nur der header ohne speicher mit (Allocate) einzuhohlen. Dadurch kannst du das nur zur laufzeit machen, sprich durch direkte angabe. Dein App wird beim laufen das OS bitten einen bestimmten speicherbereich zu hohlen, indem er das ablegen kann. daraufhin werden position (pointer), länge und alloc-grösse im stack abgelegt, und die daten selbst im mem am pointer.

Statische variablen haben eine feste, nicht veränderbare länge und können daher sofort direkt umgesetzt werden. zwar wird auch hier alloct, aber die grössenverhältnisse stehen fest, und können daher "statisch" in das prog einkompiliert werden.

PS: Das ist nciht nur beim shared array so, sondern auch beim shared string generell


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 09.02.2009, 20:36    Titel: Antworten mit Zitat

Kann man dem Compiler irgendwie sagen, dass er das statisch machen soll? Denn die Werte aus dem Array werden nur ausgelesen und niemals verändert (Sprich: Die Größe ändert sich nie).

Oder kann man Konstanten mit Array-Index definieren? Das wäre am Idealsten...

Ich brauche nämlich eine Art Funktion, die mir für eine bestimmte Zahl zwischen 0 und 255 eine bestimmte - immer gleiche - Zeichenkette zurückgibt. Dies als Funktion zu implementieren wäre zu umständlich, oder?
Ich hoffe jetzt darauf, dass FreeBasic da irgend ein einfacheres Mittel zur Verfügung stellt...
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 09.02.2009, 21:08    Titel: Antworten mit Zitat

St_W hat Folgendes geschrieben:
Kann man dem Compiler irgendwie sagen, dass er das statisch machen soll? Denn die Werte aus dem Array werden nur ausgelesen und niemals verändert (Sprich: Die Größe ändert sich nie).

Code:
Dim Shared Bla as ZString * <maximallänge als zahl> = blub



Zitat:
Oder kann man Konstanten mit Array-Index definieren? Das wäre am Idealsten...

hä? [EDIT]: axooo .. nö .. das geht ned


Zitat:
Ich brauche nämlich eine Art Funktion, die mir für eine bestimmte Zahl zwischen 0 und 255 eine bestimmte - immer gleiche - Zeichenkette zurückgibt. Dies als Funktion zu implementieren wäre zu umständlich, oder?

Code:
function getconststring(V_ID as UByte) as String
Select Case V_ID
    Case 0: Return "bla"
    Case 1: Return "Blub"
    Case 2: Return "foo"
'...
End Select
End Function



Zitat:
Ich hoffe jetzt darauf, dass FreeBasic da irgend ein einfacheres Mittel zur Verfügung stellt...
http://www.freebasic-portal.de/index.php?s=reftopic&id=132 .. zwar noch nie mit gearbeitet, aber sollte kein prob sein.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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