
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> Hallo, da bin ich wieder... Hallo, > Ich kann jetzt hübsch mit den Funktionen arbeiten, aber ich bin nun mal ein Typ, der gerne weiß was > er da macht, und warum (-8 > Das ist ja auch gut so ;) > Ich hab auch herumgegoogelt und versucht mehr darüber zu erfahren, bin aber fast immer auf Visual- > Basic Seiten gelandet, die mir die Sache nur noch weiter komplizieren. Ähnlich wie mBasic war es ja auch das Ziel von BASIC++ die Syntax mehr in Richtung moderne Basic Dialekte zu bringen. Was Du also bei der C-Control mit den neuen Basic Dialekten kannst, wäre analog auch (unter Berücksichtigung einiger Nebeneffekte) in VB zu machen. > Was hat es z. B. mit dem Rückgabewert auf sich ," return irgendwas " der mir wie ich > herausgefunden habe die erste Wordvariable besetzt ? Aus der Mathematik wissen wir, dass Funktionen uns Werte zurückgeben. Eine einfache Funktion wäre zum Beispiel: f(x) = x² Hierbei würde man der Funktion einen Wert (Parameter) übergeben und als Ergebnis erhält man die auf den Parameter angewendete Funktion. Bei x = 2 erhält man 4, bei x = 3 erhält man 9 und so weiter. Ähnlich verhält es sich auch mit Funktionen, nur dass es hierbei einem offen steht, ob man einen Rückgabewert übergeben will oder nicht. Die obige Funktion würde man in BASIC++ so programmieren: DEFINE Ergebnis AS BYTE FUNCTION Quadrat(x AS BYTE) Quadrat = x * x END FUNCTION Ergebnis = Quadrat(4) ' das Ergebnis wird 16 sein Rückgabewerte können dabei über den Funktionsnamen (Zuweisung) oder mit dem Schlüsselwort RETURN gemacht werden. Letzteres ging auch schon im alten CCBASIC: DEFINE Ergebnis BYTE DEFINE x AS BYTE x = 4 Ergebnis = Quadrat END #Quadrat RETURN (x*x) Die neue M Unit 2.0 (für die BASIC++ im besonderen optimiert ist) hat ein Problem: Sie kann keine Rückgabewerte von Funktionen in den Stack speichern. Das hat technische Gründe, auf die ich hier nicht eingehen möchte (führt zu weit und erfordert mehr Verständis von der Rechnerarchitekturen). Aus diesem reserviert BASIC++ das erste Word im Speicher als Rückgabevariable. Das ist ungünstig, lässt sich aber leider für die M Unit 2.0 (bei der Micro ist es das erste BYTE) nicht vermeiden. Wenn man aber mit der alten C-Control arbeitet kann man BASIC++ zwingen das erste Word frei zulassen und wie gewohnt die Rückgaben über den Rechenstack erzwingen. Dazu muss man einen Befehl ganz am Anfang des Programms setzten, womit man die "Zielplattform" auswählt: OPTION CC1.0 DEFINE Ergebnis AS BYTE FUNCTION Quadrat(x AS BYTE) Quadrat = x * x END FUNCTION Ergebnis = Quadrat(4) ' das Ergebnis wird 16 sein Jetzt steht auch das erste Word zur Verfügung. > Ich kann doch in den Funktionen jede definierte Variable überschreiben und dann damit > weiterarbeiten. Oder ist das nur eine Option auf die weiterentwicklung von Basic++ ? Jein. Es kommt darauf an wie Du das meinst. Anders als ein PC ist die C-Control nicht in der Lage mit sog. Pointern zu arbeiten. Du kannst natürlich in Funktionen jede globale und lokale Variable, bei Nennung des Index/Offsets ja im Grunde jede Variablenposition bearbeiten. Schöne Weihnachten, Stefan Meine Homepage: http://www.fdos.de |
| Antwort schreiben |