WITH

FreeBASIC-Referenz » Alphabetische Befehlsreferenz » W » WITH

Typ: Anweisung
Kategorie: Verschiedenes
Syntax:

WITH UDT_Name
   [Ausdruck_mit_'.Record1'
   [Ausdruck_mit_'.Record2']
   [...]
END WITH

Innerhalb eines WITH-Blocks müssen nur die Namen der Records eines UDTs angegeben werden, nicht aber der UDT-Bezeichner selbst. Dies erspart dem Programmierer einige Tipparbeit.

UNION wird ebenfalls unterstützt. 'UDT_Name' kann auch ein dereferenzierter Pointer sein.

Beispiel:

TYPE AdrType
Name AS STRING
City AS STRING
PLZ AS INTEGER
END TYPE
DIM Adressen(10) AS AdrType

WITH Adressen(0)
.PLZ = 98765
.Name = "Karl Mustermann"
END WITH

Innerhalb eines WITH-Blocks müssen keine festen Reihenfolgen eingehalten werden. Es ist auch möglich, innerhalb eines WITH-Blocks andere Anweisungen zu benutzen. Der Zugriff auf andere UDTs als dem zuerst genannten ist ebenfalls möglich:

TYPE MyType
MyStr AS STRING
MyInt AS INTEGER
MyPtr AS INTEGER PTR
END TYPE

TYPE OtherType
OthStr AS STRING
OthArr(20) AS INTEGER
END TYPE

DIM Anything(10) AS MyType
DIM AnythingElse AS OtherType

WITH Anything(5)
FOR i = 0 TO 10
.MyStr = STR(AnythingElse.OthArr(i))
PRINT .MyStr
PRINT @.MyPtr
NEXT
END WITH

WITH-Blöcke dürfen auch verschachtelt sein:

TYPE MyType
MyStr AS STRING
MyInt AS INTEGER
MyPtr AS INTEGER PTR
END TYPE

TYPE OtherType
OthStr AS STRING
OthArr(20) AS INTEGER
OthUdt As MyType
END TYPE

DIM Anything(10) AS MyType
DIM AnythingElse AS OtherType

WITH AnythingElse
.OthStr = "hello"
.OthArr(5) = 7
WITH .OthUdt
.MyStr = "world"
.MyInt = 8
.MyPtr = @.MyInt
END WITH
END WITH

Ein WITH-Block mit einem dereferenzierten Pointer als Argument:

TYPE SubType
d AS INTEGER
e AS INTEGER
f AS INTEGER
End Type

TYPE MainType
a AS INTEGER
b AS INTEGER
c AS SubType
End Type


DIM x AS MainType PTR
x = CALLOCATE(LEN(MainType))

WITH x->c
.d = 5
.e = 6
.f = 7

PRINT .d
PRINT .e
PRINT .f
END WITH

SLEEP

Hinweise:
- WITH funktioniert (noch) nicht mit NAMESPACE
- Aufgrund der inneren Struktur sollte nicht mit GOTO in einen WITH-Block gesprungen werden

Unterschiede in den Dialektformen:
- unter -lang qb ist WITH nur als __WITH verfügbar

Unterschiede zu QuickBASIC:
- Neu in FreeBASIC

Siehe auch:
TYPE, UNION, DIM