5.8.5 Typetest
De C2 – compiler voert bij elke oproep van een functie een test uit, of naast het aantal parameters ook
het desbetreffende type overeenkomt met de functiedefinitie. Een kenmerk van een string – variabele kan
bijvoorbeeld niet doorgegeven worden, als er volgens de definitie op deze plaats een numerieke term
verwacht wordt.
De volgende type –comptabiliteitsregels gelden:
Type van de formele parameter
in de functiekop
byte, int, long, float
byte [ ]
int [ ]
long [ ]
float [ ]
String
string [ ]
samengesteld type, b.v.
MyType
MyType [ ]
*) Verwijzingen naar constante arrays mogen niet aan functies doorgegeven worden.
5.8.6 Recursie
Een functie kan zich theoretisch ook zelf oproepen. Dat wordt aangeduid als recursie. Sommige
wiskundige benaderingen berusten op recursieve algoritmen met afbreekbeperkingen.
C2 verbiedt recursieve functie –oproepen niet uitdrukkelijk, maar ze dienen echter vermeden te
worden.
Recursies leiden vanaf een bepaalde diepte steeds tot overschrijding van het stackbereik dat voor een
thread gereserveerd is. Dan worden data van andere threads ongewild overschreven. Dit kan leiden tot
locale fouten tot zelfs het totaal crashen van het gehele systeem van de C-Control II unit!
5.8.7 Inline – functies en –opdrachten
De bibliotheekmodules voor de toegang tot de bronnen van de C-Control II unit (b.v. hwcom.c2)
gebruiken inline – functies en –opdrachten voor het rechtstreeks invoegen van virtuele machinecodes in
de programma – brontekst. Er geldt dat inline –functies alleen inline –opdrachten mogen bevatten. In
een inline –opdracht moet na het codewoord een constante term staan, die voor een operatiecode staat
(zie 4.4.2).
Alleen de C2 – systeemontwikkelaars hebben inline –functies en opdrachten nodig. Een
uitvoerige documentatie van de aparte operatie – codes van de virtuele machine vormt
geen onderdeel van de leveringsomvang van de C-Control II unit.
5.9 Threads
5.9.1 Definitie
Threads worden op moduleniveau gedefinieerd en zijn na de definitie globaal zichtbaar. Er zijn geen
geneste threads binnen threads en geen locale threads binnen subfuncties. De definitie van een thread
begint met het codewoord thread. Dan volgen het kenmerk en een opdrachtblok tussen accolades.
thread Name
{
/ / opdrachten
}
Toelaatbare actuele parameters bij het oproepen
van een functie
Willekeurige numerieke term
Kenmerk van een byte – array - variabele *)
Kenmerk van een string – variabele
Ge ndiceerd kenmerk van een string – array - variabele
Kenmerk van een int – array - variabele *)
Kenmerk van een long - array - variabele *)
Kenmerk van een float - array - variabele *)
Onbenoemde string – constante
Kenmerk van een string – variabele
Ge ndiceerd kenmerk van een string – array - variabele
Kenmerk van een string – constante
Ge ndiceerd kenmerk van een string – arrayconstante
Kenmerk van een string – array - variabele *)
Kenmerk van een MyType – variabele
Ge ndiceerd kenmerk van een MyType – array - variabele
Kenmerk van een MyType – array - variabele *)
39