Funktion

Dieser Teil von ManderC ist noch unvollständig, die aufgeführten Inhalte sind nicht strukturiert, sondern nur Schnipsel, die später möglicherweise verwendet werden.

Wenn man selbst eine Funktion schreiben möchte, so definiert man in C und C++ einen Namen, eine Auflistung von Parametern, einen Rückgabetyp und die Implementation der Funktion selbst. Der Name, die Parameter und der Rückgabetyp werden als Head (Kopf) der Definition bezeichnet. Dieser Head gibt Informationen darüber, wie eine Funktion gehandhabt werden muss, was man als Deklaration bezeichnet. Die eigentliche Implementation wird als Definition bezeichnet. Um eine Funktion als Blackbox zu verwenden, kann in C und C++ für jede Funktion ein sogenannter Prototyp niedergeschrieben werden, eine Kopie des Heads, der einzig beschreibt, wie die Funktion deklariert ist. Diese Prototypen stehen in den sogenannten Header-Dateien, den .h-Files, welche von anderen Dateien eingebunden werden können, um auf den Funktionsumfang zuzugreifen, ohne ihn im Detail zu kennen.

In C und C++ wird ausführbarer Code in funktionale Einheiten verpackt, welche als Funktionen bezeichnet werden. Während in anderen Sprachen teilweise zwischen Prozeduren und Funktionen unterschieden wird, spricht man in C und C++ grundsätzlich stets von Funktionen. Dies aus folgendem Grund: Eine Prozedur unterscheidet sich von einer Funktion einzig darin, dass eine Prozedur keinen Wert zurückgibt. Da in C und C++ Funktionsaufrufe als Operator gelten, also eine Anweisung darstellt, die ausgewertet werden kann, müssen Funktionen genauso wie alle Werte typisiert werden. Eine Funktion wird stets als eine Einheit mit einem fest deklarierten Typ festgelegt. Prozeduren werden in C und C++ somit als Funktion mit dem Rückgabetyp void deklariert, was für den Rückgabewert zu interpretieren ist als: ungültig, zu ignorieren.

Beim Aufruf einer Funktion wird der Compiler auf dem Stack einen Platz für einen möglichen Rückgabewert freigehalten. Die Grösse dieses Speichers ist für 32bit-Systeme stets 4 Byte, für 64bit-Systeme stets 8 Byte gross. Für komplexe Rückgabewerte wie beispielsweise ein long double oder ein ganzes Objekt ist dieser Platz zu klein, er reicht jedoch aus, um eine Adresse auf einen Platz mitzugeben, welcher von der aufrufenden Funktion vor Aufruf der Funktion reserviert wird.

Versucht man trotzdem, den Wert zu verwenden, so wird der Compiler einen Fehler wie etwa den folgenden ausgeben: void value not ignored as it ought to be. Versucht man, in einer Prozedur einen Wert zurückzugeben, wird eine Warnung wie die folgende ausgegeben: return with a value, in function returning void.

Dieser Teil von ManderC ist noch unvollständig, weitere Einträge folgen.