|
Navigation: Compiler > BASIC > Variablen |
![]() ![]()
|
Variablen können verschiedene Werte annehmen, abhängig vom Datentyp, mit denen sie definiert wurden. Eine Variablendefinition sieht folgendermaßen aus:
Dim Variablenname As Typ
Möchte man mehrere Variablen des gleichen Typs definieren, so kann man mehrere Variablennamen durch Komma getrennt angeben:
Dim Name1, Name2, Name3 As Integer
Als Typ sind erlaubt: Char, Byte, Integer, Word, Single
Beispiele:
Dim a As Integer
Dim i,j As Integer
Dim xyz As Single
Integer Variablen lassen sich Zahlenwerte dezimal oder als Hexzahl zuweisen. Bei einer Hexzahl werden vor die Zahl die Buchstaben "&H" gesetzt. Zusätzlich ist es erlaubt, wie bei C Hexadezimalzahlen mit dem Prefix "0x" beginnen zu lassen. Bei Variablen mit vorzeichenbehaftetem Datentyp lassen sich negative Dezimalzahlen zuweisen, indem ein Minuszeichen vor die Zahl geschrieben wird.
Für Zahlen ohne Dezimalpunkt oder Exponent wird angenommen, das sie vom Typ Integer mit Vorzeichen sind. Um eine Zahl explizit als vorzeichenlosen Integer zu definieren, so ist ein "u" direkt hinter die Zahl zu schreiben.
Beispiele:
Dim a As Word
Dim i,j As Integer
a=&H3ff
a=50000u
i=15
j=-22
a=0x3ff
Fließkommazahlen (Datentyp Single) dürfen ein Dezimalpunkt und einen Exponenten beinhalten:
Dim x,y As Single
x=5.70
y=2.3e+2
x=-5.33e-1
SizeOf Operator
Mit dem Operator SizeOf() kann die Anzahl der Bytes bestimmt werden, die eine Variable im Speicher belegt.
Beispiel:
Dim s As Integer
Dim f As Single
s=SizeOf(f) ' der Wert von s ist 4
Bei Arrays wird auch nur die Bytelänge des Grunddatentyps zurückgegeben. Man muß den Wert mit der Anzahl der Elemente multiplizieren, um den Speicherverbrauch des Arrays zu berechnen.
Array Variablen
Wenn man hinter den Namen, bei der Variablendefinition in runden Klammern, einen Zahlenwert schreibt, so hat man ein Array definiert. Ein Array legt den Platz für die definierte Variable mehrfach im Speicher an. Bei der Beispieldefinition:
Dim x(10) As Integer
Wird für die Variable x der 10-fache Speicherplatz angelegt. Den ersten Speicherplatz kann man mit X(0) ansprechen, den zweiten mit x(1), den dritten mit x(2), ... bis x(9). Man darf bei der Definition natürlich auch andere Indexgrößen wählen. Die Limitierung ist nur der RAM Speicherplatz des C-Control Pro.
Man kann auch mehrdimensionale Arrays deklarieren, in dem weitere Indizes, durch Komma getrennt, bei der Variablendefinition angefügt werden:
Dim x(3,4) As Integer ' Array mit 3*4 Einträgen
Dim y(2,2,2) As Integer ' Array mit 2*2*2 Einträgen
Arrays dürfen in BASIC bis zu 16 Indizes (Dimensionen) haben. Der Maximalwert für einen Index ist 65535. Die Indizes der Arrays sind immer nullbasiert, d.h., jeder Index beginnt mit 0.
Nur wenn die Compiler Option "Array Index Grenzen prüfen" gesetzt ist, findet während des Programmlaufs eine Überprüfung statt, ob die definierte Indexgrenze eines Arrays überschritten wurde. Wird ansonsten der Index während der Programmabarbeitung zu groß, so wird auf fremde Variablen zugegriffen, und die Chance ist groß, daß das Programm "abstürzt".
Tabellen mit vordefinierten Arrays
Seit Version 2.0 der IDE können Arrays mit Werten vorbelegt werden:
Dim glob(10) = {1,2,3,4,5,6,7,8,9,10} As Byte
Flash fglob(2,2)={10,11,12,13} As Byte
Sub main()
Dim loc(5)= {2,3,4,5,6} As Byte
Dim xloc(2,2) As Byte
xloc= fglob
End Sub
Da bei der C-Control Pro Unit mehr Flash als RAM Speicher zur Verfügung steht, kann man mit dem Flash Befehlswort Daten definieren, die nur im Flashspeicher stehen. Diese Daten können dann durch eine Zuweisung auf ein Array im RAM mit gleichen Dimensionen kopiert werden. Im Beispiel ist dies: "xloc= fglob".
Strings
Es existiert kein expliziter "String" Datentyp. Ein String basiert auf einem Array vom Datentyp Char. Man muß die Größe des Arrays so wählen, daß alle Zeichen des Strings in das character Array passen. Zusätzlich wird Platz für ein Terminierungszeichen (dezimal Null) benötigt, um das Ende der Zeichenkette anzuzeigen.
Beispiel für eine Zeichenkette mit maximal 20 Zeichen:
Dim str1(21) As Char
Als Ausnahme darf man Char Arrays Zeichenketten zuweisen. Dabei wird die Zeichenkette zwischen Anführungszeichen gesetzt.
str1="Hallo Welt!"
Man kann keinen String einem mehrdimensionalen Char Array zuweisen. Es gibt aber Tricks für Fortgeschrittene:
Dim str_array(3,40) As Char
Dim Single_str(40) As Char
Single_str="A String"
Str_StrCopy(str_array,Single_str,40) // kopiert Single_str in den zweiten String von str_array
Dies funktioniert, da mit einem Abstand von 40 Zeichen hinter dem ersten String, in str_array der Platz für den zweiten String liegt.
Sichtbarkeit von Variablen
Werden Variablen außerhalb von Funktionen deklariert so haben sie eine globale Sichtbarkeit. Das heißt, man kann sie aus jeder Funktion ansprechen. Variablendeklarationen innerhalb von Funktionen erzeugen lokale Variablen. Lokale Variablen sind nur innerhalb der Funktion erreichbar. Ein Beispiel:
Dim a,b As Integer
Sub func1()
Dim a,x,y As Integer
// globale b ist zugreifbar
// globale a ist nicht zugreifbar da durch lokale a verdeckt
// lokale x,y sind zugreifbar
// u ist nicht zugreifbar da lokal zu Funktion main
End Sub
Sub main()
Dim u As Integer
// globale a,b sind zugreifbar
// lokale u ist zugreifbar
// x,y nicht zugreifbar da lokal zu Funktion func1
End Sub
Globale Variablen haben einen definierten Speicherbereich, der während des gesamten Programmlaufs zur Verfügung steht.
Bei Programmstart werden die globalen Variablen mit null initialisiert.
Lokale Variablen werden, während der Berechnung einer Funktion, auf dem Stack angelegt. Das heißt, lokale Variablen existieren im Speicher nur während des Zeitraums, in der die Funktion abgearbeitet wird.
Wird bei lokalen Variablen der gleiche Name gewählt wie bei einer globalen Variable, so verdeckt die lokale Variable die globale Variable. Solange sich das Programm dann in der Funktion aufhält wo die namensgleiche lokale Variable definiert wurde, ist die globale Variable nicht ansprechbar.
Static Variablen
Man kann bei lokalen Variablen die Eigenschaft Static für den Datentyp setzen.
Sub func1()
Static a As Integer
End Sub
Static Variablen behalten im Gegensatz zu normalen lokalen Variablen ihren Wert auch, wenn die Funktion verlassen wird. Bei einem weiteren Aufruf der Funktion hat die statische Variable den gleichen Inhalt wie beim Verlassen der Funktion. Damit der Inhalt einer Static Variable bei dem ersten Zugriff definiert ist, werden statische Variablen wie globale auch bei Programmstart mit null initialisiert.