Referenz - DECLARE
Syntax A:
DECLARE SUB Name [Aufrufkonvention] [OVERLOAD] [[LIB "DLLName"] _
ALIAS "AliasName"] [ ( _
[{BYVAL | BYREF } ] [{Parameter1 | ()}] AS Typ [= Wert] [, _
[{BYVAL | BYREF } ] [{Parameter2 | ()}] AS Typ [= Wert] ] [, ...] ) ]
Syntax B:
DECLARE FUNCTION Name [Aufrufkonvention] [OVERLOAD] [[LIB "DLLName"] _
ALIAS "AliasName"] [ ( _
[{ BYVAL | BYREF } ] [{Parameter1 | ()}] AS Typ [= Wert] [, _
[{ BYVAL | BYREF } ] [{Parameter2 | ()}] AS Typ [= Wert] ] [, ...] ) AS Rückgabetyp
Typ: Anweisung
Kategorie: Deklaration
Anmerkung zur Syntax: Unterstriche (_) am Zeilenende werden von FreeBASIC so interpretiert, als wäre die Zeile nicht unterbrochen; dies dient nur der besseren Übersichtlichkeit und hat letztendlich keine Auswirkungen auf die Programmausführung.
DECLARE deklariert eine neue Prozedur. Dies ist notwendig, wenn die Prozedur aufgerufen werden soll, bevor sie im Quellcode definiert wird.
- 'Name' ist der Bezeichner, unter dem die SUB bzw. FUNCTION aufgerufen wird.
- 'Aufrufkonvention' ist ein Schlüsselwort, das angibt, in welcher Reihenfolge die Parameter übergeben werden sollen. Möglich sind: STDCALL, CDECL und PASCAL.
- 'OVERLOAD' erlaubt, Prozeduren mit unterschiedlicher Parameterliste, aber gleichem Prozedurnamen deklarieren. Siehe dazu den Referenzeintrag OVERLOAD.
- 'DLLName' ist der Name der LIB/DLL, in der sich die Prozedur befindet.
- 'AliasName' ist der Name, unter dem die Prozedur in der LIB/DLL aufgeführt ist. Da diese manchmal Zeichen enthalten, die unter FreeBASIC nicht erlaubt sind, ist es möglich, ihnen "einen anderen Namen zu geben".
- 'Parameter1', 'Parameter2', '...' stehen für Parameter, die an die Prozedur übergeben werden sollen (siehe auch Parameterübergabe). Ihre Namen sind hier eigentlich unbedeutend und können ausgelassen werden (anonyme Parameter). Eine Deklaration, in der die Parameter bezeichnet werden, ist jedoch einfacher nachzuvollziehen.
- Wird der Parametername eines Arrays ausgelassen, muss '()' verwendet werden, um dem Compiler zu signalisieren, dass es sich beim anonymen Parameter um ein Array handelt.
- 'Typ' ist der Datentyp der übergebenen Parameter; siehe Datentypen.
- Durch die Klausel '= Wert' wird ein Parameter als optional deklariert; er kann beim Aufruf der Prozedur ausgelassen werden. In diesem Fall wird an die Prozedur für diesen Parameter 'Wert' übergeben. 'Wert' darf ein einfacher Ausdruck sein, der Konstanten, Operatoren und Funktionen, jedoch keine Variablen enthält.
- 'BYVAL' bzw. 'BYREF' gibt an, ob der Parameter als Wert (by value) oder als Referenz (by reference) übergeben wird. Näheres dazu finden Sie unter BYVAL.
- 'Rückgabetyp' hinter der Parameterliste ist der Typ des Rückgabewertes der FUNCTION.
DECLARE wird auch bei UDTs verwendet, um einen CONSTRUCTOR bzw. DESTRUCTOR, eine PROPERTY oder die Überladung von OPERATORen zu deklarieren.
Werden Prozeduren vor ihrem ersten Aufruf definiert, dann ist keine vorherige Deklaration nötig. Jedoch kann eine kompakt zusammenstehende Deklaration aller im Programm auftretenden Prozeduren zur Lesbarkeit des Quellcodes beitragen.
Beispiel:
DECLARE FUNCTION twice (AS INTEGER) AS INTEGER
DECLARE SUB PrintTimes (AS STRING, BYVAL AS INTEGER = 1)
FUNCTION twice (x AS INTEGER) AS INTEGER
twice = x * 2
END FUNCTION
SUB PrintTimes (ToPrint AS STRING, BYVAL times AS INTEGER = 1)
FOR i AS INTEGER = 1 TO times
PRINT ToPrint
NEXT
END SUB
PRINT "Das Doppelte von 42 ist: "; twice(42)
PrintTimes "Einmal"
PrintTimes "Zehn mal", 10
Sleep
Beispiel 2 mit anonymen Array-Parameter:
Declare Sub foo(() As Integer)
Dim As Integer bar(0 To ...) = {0, 1, 2}
foo(bar())
Sleep
Sub foo(array() As Integer)
For i As Integer = LBound(array) To UBound(array)
Print array(i)
Next
End Sub
DECLARE-Anweisungen können direkt an den Beginn eines BAS-Moduls gesetzt werden. Häufig werden sie jedoch in eine eigene Datei ausgelagert und dann über #INCLUDE eingebunden. Für gewöhnlich erhält eine solche Datei die Dateiendung .bi
Wenn eine Prozedur aus einer LIB/DLL eingebunden wird, muss ihr über die Klausel ALIAS ein Name zugewiesen werden, über den sie innerhalb des Programms angesprochen werden kann.
Unterschiede zu QB:
In FreeBASIC ist die Angabe der Parameternamen optional.
Unterschiede zu früheren Versionen von FreeBASIC:
Seit FreeBASIC v0.15 muss bei Prozeduren, die aus einer LIB/DLL eingebunden werden, mit ALIAS ein Name zugewiesen werden. In früheren Versionen konnte die Klausel ausgelassen werden; in diesem Fall wurde der Prozedurbezeichner als ALIAS-Name verwendet.
Unterschiede unter den FB-Dialektformen:
- In der Dialektform -lang qb und -lang deprecated werden Parameter standardmäßig BYREF übergeben.
- Deklarationen innerhalb eines TYPE-Blocks sind nur in der Dialektform -lang fb erlaubt.
Unterschiede zu früheren Versionen von FreeBASIC:
Seit FreeBASIC v0.90 können in DECLARE-Zeilen die Namen von Array-Parametern ausgelassen werden.
Siehe auch:
SUB, FUNCTION, STATIC (Klausel), PASCAL, CDECL, STDCALL, BYVAL, BYREF, SHARED, LIB, ALIAS, OVERLOAD, OPERATOR, EXPORT, Prozeduren, Parameterübergabe
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|