Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [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!

Tutorial

Variable Parameterlisten

von RedakteurMODSeite 2 von 4

Umgang mit Strings und Types

Bei den meisten Datentypen muss man nichts besonderes beachten. Dies gilt aber nicht für BefehlsreferenzeintragUDTs und BefehlsreferenzeintragStrings. Bei den Strings ergibt sich der Unterschied, da sie intern auch eine Art UDT sind.
Fangen wir mit den Strings an. Ein String kann als solches problemlos übergeben werden, um ihn aber in der Funktion auslesen zu können, muss er als BefehlsreferenzeintragZString BefehlsreferenzeintragPtr behandelt werden:

Function add Cdecl (anzahl As Integer, ...) As String
    Dim As String ergebnis

    Dim As Any Ptr argument = va_first()


    For i As Integer = 1 To anzahl
        ergebnis += *va_arg(argument, ZString Ptr)
        argument = va_next(argument, ZString Ptr)
    Next

    Return ergebnis
End Function

Dim As String text1 = "Hallo "
Dim As String text2 = "Welt!"

Print add(2, text1, text2)
Sleep

UDTs müssen, ähnlich den Strings, auch als Pointer behandelt werden. Eine einfache Art dies zu bewerkstelligen ist die folgende:

Type myType
    As String foo
    As Integer bar
End Type

Sub PrintMyType Cdecl (anzahl As Integer, ...)
    Dim As Any Ptr argument = va_first()
    Dim As myType Ptr temp


    For i As Integer = 1 To anzahl
        temp = va_arg(argument, myType Ptr)

        Print temp->foo, temp->bar

        argument = va_next(argument, myType Ptr)
    Next

End Sub

Dim As myType test1
Dim As myType test2

test1.foo = "Nummer 1"
test2.bar = 2

PrintMyType(2, @test1, @test2)
Sleep

Gemischte Datentypen

Soll die variable Parameterliste nun verschiedene Datentypen enthalten, stehen wir natürlich vor einem Problem. Wir wissen, dass die Daten im Speicher liegen, aber um sie auszulesen, müssen wir nicht nur wissen, wie viele Parameter wir erwarten, nein auch der Datentyp muss bekannt sein um die Daten sinnvoll interpretieren zu können.

Eine Lösung wäre nun, den ersten Parameter als 'Formatstring' zu verwenden. Hier bietet der Referenzeintrag von BefehlsreferenzeintragVA_FIRST ein solch gutes Beispiel (das zweite 'verkürzte' Beispiel ist besonders anschaulich), dass ich an dieser Stelle nur auf den Artikel verweise.



 

Gehe zu Seite Gehe zu Seite  1  2  3  4  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 06.04.2011 von RedakteurMOD angelegt.
  • Die aktuellste Version wurde am 28.08.2011 von RedakteurMOD gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen