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:

Befehlserklärung: UNION/ENUM

 
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
Dusky_Joe



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

BeitragVerfasst am: 19.04.2005, 14:13    Titel: Befehlserklärung: UNION/ENUM Antworten mit Zitat

Hi Leute!

Im einen oder anderen Beispielprogramm, vor allem aber in den BI's von FB findet man immer wieder mal UNION und ENUM-Blocks. Das Engl. Handbuch gibt leider wenig Aufschluss darüber...

Anmerkung: Es wäre möglich, dass ich die eine oder Andere Formulierung in der FB-Referenz verwende... ich hoffe, das ist in Ordnung. In der End-Version werde ich auf jeden Fall eine Bemerkung anfügen, dass mir die QB-Community geholfen hat, und (sofern ich mich noch an alle erninnere...) einige Namen erwähnen.
_________________
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
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

BeitragVerfasst am: 19.04.2005, 15:07    Titel: Antworten mit Zitat

Ich habe zwar noch nie FB verwendet, aber da es ja nichts anderes als eine vereinigung von qb und c++ Befehlen ist, kann ich trotzdem versuchen zu helfen

enum:
enum steht für Enumeration (Aufzählung).
Es wird verwendet um Zuständen einen Namen zu geben. Ein berühmtes Beispiel sind dabei boolsche Variablen. Anstatt mit den Zahlen –1 und 0 zu arbeiten ist es doch Übersichtilicher die Wörter true und false zu verwenden:

enum boolean {true, false}

boolean bWert = true;


Union:
Eine union hat nur einen Unterschied zu einem type-Feld, nämlich das alle Variablen sich den selben Speicher teilen. Bisher habe ich das nur bei der Datenübertragung benötigt. Wenn man immer nur jeweils ein Byte senden darf, dann muß man eine Integer-Variable in ihre 4 Byte zerlegen. Ich habe jetzt keine Ahnung wie eine Union in FB aussieht, aber etwa so sollte es gehen:
Code:
UNION iUnion
i AS INTEGER
b(1 TO 4) AS BYTE
END UNION

DIM Variable AS iUnion
INPUT iUnion.i

FOR i% = 1 TO 4
CALL send(iUnion.b(i%))
NEXT I%
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



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

BeitragVerfasst am: 19.04.2005, 15:21    Titel: Antworten mit Zitat

Perfekt!
Von so einer Erklärung träumt man *g*

Also danke!
_________________
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
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 19.04.2005, 15:50    Titel: Antworten mit Zitat

fb ist keine vereinigung von basic und c++. aber lassen wir das.

das enum beispiel ist so nicht ganz korrekt. enums in fb werden wie folgt verwendet.

enum EnumName <- ist optinal afaik, einfach checken
MY_ENUM_ID
MY_SECOND_ENUM_ID
end enum

enums sind dabei 32-bit integers. im obigen beispiel hätte MY_ENUM_ID den wert 0, alle folgenden halt jeweils immer um eins mehr als der vorhergehende. man kann auch neue "offsets" setzen bei denen zu zählen begonnen wird. z.B.

enum EnumName
MY_ID = 10
MY_ID_2
end enum

MY_ID würde den wert 10 erhalten, MY_ID_2 den wert 11 etc.

enums werden vorrangig als #define/const ersatz benutzt, da sie einem das lästige per hand durchnummerieren ersparen.
_________________
Yagl - yet another gameprogramming library
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Dusky_Joe



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

BeitragVerfasst am: 19.04.2005, 15:58    Titel: Antworten mit Zitat

OK... Aber mir ist jetzt eine Zeile aufgefallen:

Code:

ENUM EnumName
 ...
END ENUM

DIM Variable AS EnunName


Was hat das jetzt für nen Sinn?
Ist Variable dann so was wie ein UDT mit vielen verschiedenen INTEGER-Feldern?
_________________
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
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

BeitragVerfasst am: 19.04.2005, 16:22    Titel: Antworten mit Zitat

Ach ja stimmt bei Basic muß man das natürlich anders machen.

ENUM boolean
true
false
END ENUM

DIM bWert AS boolean


Der Sinn ist einfach Zuständen einen Namen zu geben. Da bWert in dem Beispiel vom Typ boolean ist kann er nur die Zustände true oder false annehmen:
bWert = true
if bWert = true THEN ...

In wirklichkeit wird jedem Zustand eine Zahl zugeordnet. Es währe also das selbe wie wenn man schreiben würde:
CONST true = 0
CONST false = 1
DIM bWert AS INTEGER

bWert = true
if bWert = true THEN ...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 19.04.2005, 16:49    Titel: Antworten mit Zitat

@dusky joe

die variable würde mehr oder minder als integer definiert werden wie stef bereits gesagt hat. es is also kein udt. die sinnhaftigkeit dahinter besteht darin, konstanten deren werte im grunde irrelevant sind schön zu kapseln. beispielsweise für rückgabewerte von funktionen

Code:

enum ERROR_CODE
   ERROR_FILE_NOT_FOUND
   ERROR_FILE_READ_ONLY
   ERROR_UNKNOWN
end enum

dim error as ERROR_CODE

error = myOpenFileFunction( "test.txt" )
if( error = ERROR_FILE_NOT_FOUND ) then bleh
...

_________________
Yagl - yet another gameprogramming library
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
helium



Anmeldungsdatum: 10.09.2004
Beiträge: 397
Wohnort: Leverkusen

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

Zitat:
fb ist keine vereinigung von basic und c++

Eine Vereinigung sicherlich nicht, aber existieren in FB irgendwelche Dinge, die nicht einfach eins zu eins aus C übernommen wurden, die es in QB nicht gibt?
Verständlich ist die Aussage meiner Meinung nach irgendwie schon.
_________________
Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
d.j.peters
Gast





BeitragVerfasst am: 23.04.2005, 10:58    Titel: Antworten mit Zitat

Dusky_Joe hat Folgendes geschrieben:
OK... Aber mir ist jetzt eine Zeile aufgefallen:

Code:

ENUM EnumName
 ...
END ENUM

DIM Variable AS EnunName


Was hat das jetzt für nen Sinn?
Ist Variable dann so was wie ein UDT mit vielen verschiedenen INTEGER-Feldern?


Hallo,
das man eine Variable mit dem type enum declariert hat folgenden Grund.
Code:

enum erlaubte_werte
   ok
   auch_ok
end enum

dim wichtiger_parameter as erlaubter_wert
wichtiger_parameter = ok
wichtiger_parameter = auch_ok
wichtiger_parameter = 4     'ergibt Error


Noch eine schöne Zeit.

Joshy
Nach oben
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