Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - BYREF (Rückgaben)

Referenz-Navigation

 

Syntax: [DECLARE] FUNCTION Name (...) BYREF AS Typ
Typ: Klausel
Kategorie: Deklaration

BYREF definiert, dass die Rückgabe der Funktion nicht als reiner Wert (by value) sondern als Referenz (by reference) erfolgen soll. Eine solche Funktion übergibt die Adresse des Rückgabewerts, statt eine Kopie davon zu erstellen und diese zu übergeben. Dadurch kann der Rückgabewert direkt über die Funktion geändert werden.

Wird BYREF nicht angegeben, übergibt die Funktion standardmäßig nur den Wert.

Funktionen, die BYREF zurückgeben, dürfen keine lokalen Variablen der Funktion zurückgeben, da diese nach dem Verlassen der Funktion gelöscht werden. Der Versuch, diese dann zu manipulieren, kann zu Abstürzen des Programms führen. Um dies zu verhindern, wird der Compiler bei dem Versuch eine Fehlermeldung ausgeben.

Soll der Wert der Rückgabe über die Funktion geändert werden, sollte '=>' verwendet werden. Siehe dazu den Referenzeintrag BefehlsreferenzeintragZuweisung. Alternativ kann die Funktion in eine zusätzliche Klammer gesetzt werden (vgl. Beispiel 2). Dies ist nötig, damit der Compiler den Aufruf richtig lesen kann und ihn nicht für einen Vergleich hält.

Auch globale und Member-Operatoren können mit dieser Syntax BYREF zurückgeben, sofern sie wie eine Funktion aufgerufen werden.

Beispiel 1:

Function f ByRef As Const ZString
  Return "abcd"
End Function

Print f
Sleep

Hinweis: Wenn Beispiel 1 in UTF mit Externer Link!BOM gespeichert wird, interpretiert der Compiler den String-Literal als BefehlsreferenzeintragWSTRING, was in diesem Fall eine Compiler-Warnung und eine falsche Rückgabe hervorruft.

Beispiel 2:

Dim Shared As String s

Function f1 ByRef As String
  Return s
End Function

Function f2(ByRef _s As String) ByRef As String
  Return _s
End Function

s = "abcd"
Print s

f1 &= "efgh"
Print s

(f2(s)) &= "ijkl"
Print s

Sleep

Beispiel 3:

Function power2(ByRef _I As Integer) ByRef As Integer
  _I *= _I
  Return _I
End Function

Dim As Integer I = 2
power2( power2( power2( I ) ) )
Print I
Sleep

Unterschiede zu QB: neu in FreeBASIC

Unterschiede zu früheren Versionen von FreeBASIC: existiert seit FreeBASIC 0.90

Siehe auch:
BefehlsreferenzeintragBYVAL (Rückgaben), BefehlsreferenzeintragFUNCTION, BefehlsreferenzeintragBYREF, BefehlsreferenzeintragFUNCTIONs, BefehlsreferenzeintragParameterübergabe


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 30.06.2013 von RedakteurMOD angelegt.
  • Die aktuellste Version wurde am 06.07.2013 von Redakteurnemored gespeichert.
  Versionen Versionen