Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Basic++ Funktionen die 2. Kategorie: Programmierung Basic (von Stefan Tappertzhofen, Homepage - 22.12.2004 10:23)
 Als Antwort auf Basic++ Funktionen die 2. von ReinhardB - 22.12.2004 9:12

> 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

Bisherige Antworten: