Referenz - ANY
Syntax A: ... AS ANY [ PTR ]
Syntax B: DIM AS datentyp variable = ANY
Typ: Datentyp
Kategorie: Datentypen
Dieser Eintrag behandelt den Datentyp ANY. Für Informationen zu ANY als Klausel siehe
INSTR,
TRIM,
LTRIM,
RTRIM,
DIM und
REDIM.
Wird ANY in einer
DECLARE-Anweisung verwendet, bewirkt es, dass Parameter jeden Typs an die Prozedur übergeben werden dürfen. Innerhalb der Prozedur werden sie dann so behandelt, wie im Prozedurheader angegeben.
Beispiel:
DECLARE SUB printFirstByte (byref x AS ANY)
DIM i AS INTEGER, z AS ZSTRING * 12, s AS STRING
i = -1
s = "Hallo Welt!"
z = "Hallo Welt!"
printFirstByte i
printFirstByte s
printFirstByte z
SLEEP
SUB printFirstByte (byref x AS UBYTE)
PRINT x
END SUB
Ausgabe:
255
160
72
Diese Werte kommen wie folgt zustande: Der
INTEGER 'i' hat den Wert -1, d.h. alle Bits sind gesetzt (siehe
BIN). Da 'i'
BYREF übergeben wird, erhält die SUB nur die Adresse von 'i'. Im Prozedurheader wurde festgelegt, dass der Parameter, dessen Adresse empfangen wurde, wie ein
UBYTE behandelt werden soll. Von den 32 bzw. 64 Bit der Integervariable 'i' werden also nur die ersten 8 ausgewertet. Diese sind alle gesetzt. In der Behandlung als
UBYTE ergibt dies 255.
Vom STRING 's' wird ebenfalls die Adresse übermittelt; wie bei
STRING (Datentyp) nachzulesen ist, steht an der Stelle, auf die verwiesen wird, nur der Bezeichner des Strings, nicht aber sein Inhalt. Das Ergebnis 160 ist also ein Teil der Adresse des Stringinhalts. Daher kann das Ergebnis auch von Rechner zu Rechner verschieden sein.
Da 'z' ein
ZSTRING ist, hat diese Variable im Gegensatz zu 's' auch keinen Bezeichner. An der Adresse von 'z', die an die Prozedur übergeben wird, ist tatsächlich der Inhalt von 'z'. 72 ist der ASCII-Code von "H", dem ersten Zeichen des Strings.
Die Verwendung von ANY ohne
PTR ist nur in
DECLARE-Zeilen an
BYREF-Argumenten erlaubt, um dort die Typenprüfung bei der Parameterübergabe zu deaktivieren.
Zusammen mit
PTR wird ANY oft verwendet, um einen Pointer auf einen Speicherbereich zu setzen, dessen Inhalt kein spezielles Format hat; siehe dazu auch
IMAGECREATE und
ALLOCATE.
ANY als Startwert (Syntax B):
Bei der Deklaration von Zahlenvariablen oder Pointern wird deren Startwert automatisch auf 0 gesetzt. Dies lässt sich mit ANY verhindern. Die Variable enthält dann den Wert, der sich bereits zuvor an der zugewiesenen Stelle im Speicher befunden hat.
Dim As Integer x1, x2 = 5, x3 = Any
Print "x1 wird 0 zugewiesen: ", x1
Print "x2 wird 5 zugewiesen: ", x2
Print "x3 wird nichts zugewiesen: ", x3
SleepAchtung: Der Typ ANY darf nicht mit VARIANT verwechselt werden, einem VB-Typ, der dazu in der Lage ist, Informationen aller Datentypen zu speichern.
Unterschiede zu QB:
Pointer und Variablen-Initiatoren sind neu in FreeBASIC.
Unterschiede unter den FB-Dialektformen:
Variablen-Initiatoren stehen unter
-lang qb nicht zur Verfügung.
Siehe auch:
DECLARE,
SUB,
FUNCTION,
ALLOCATE,
PTR,
IMAGECREATE,
INSTR,
TRIM,
LTRIM,
RTRIM,
DIM,
Datentypen,
Prozeduren
| Zusätzliche Informationen und Funktionen | ||||
|---|---|---|---|---|
|
||||




FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Versionen