Variablen und Funktionen

Variablen und Funktionen bezeichnen veränderliche Werte, welche mittels eines Symbols angesprochen werden können. Das Symbol bezeichnet den Namen der Variablen oder Funktion. Der Wert einer Variablen befindet sich an einer festgelegten Adresse im Speicher oder in einem Prozessorregister, wodurch der Wert eindeutig auffindbar, also lokalisierbar ist. Durch Angabe des Symbols können die dadurch representierten Werte gelesen oder geschrieben werden, ohne dass der Programmierer genaue Kenntnis davon besitzen muss, wo sich der durch die Variable representierte Wert befindet.







25.000000
#include <stdio.h>

int main(){
  int   a = 5;
  float b;
  b = a * a;
  printf("%f\n", b);
  return 0;
}

Eine Funktion ist zu verstehen als eine funktionale Einheit, die bei Bedarf mittels Angabe des Symbols und gewünschten Argumenten aufgerufen werden kann und eine ausprogrammierte Funktionalität anbietet. Der Rückgabewert der Funktion wird somit stets frisch berechnet.









Area: 78.539749
#include <stdio.h>

float area(float r){
  return r * r * 3.14159;
} 

int main(){
  float radius = 5;
  printf("Area: %f", area(radius));
  return 0;
}

Details

Jeder Variablen und jeder Funktion wird ein Typ zugeordnet, was man Deklaration nennt. Funktionsdeklarationen sind sehr vielseitig. Die vielen Möglichkeiten sind im Detail auf der Funktions-Deklarations-Seite beschrieben.

Die tatsächliche Festlegung des Inhalts (Ausprogrammierung, beziehungsweise Instanziierung) erfolgt mittels einer sogenannten Definition. Jede Definition wird vom Compiler in eine Zuordnung des Symbols zu einer Speicher-Adresse oder eines Registers umgewandelt und jedes Auftreten des Variablen- oder Funktions-Namens innerhalb einer Anweisung wird vom Compiler in die entsprechende Speicher-Adresse oder das Register umgewandelt.

Rein semantisch betrachtet sind Funktionen in C und C++ nichts anderes als erweiterte Variablen. Der Wert, den eine Funktion representiert, wird jedoch nicht wie bei einer Variablen direkt aus dem Speicher gelesen, sondern wird durch eine Abzweigung des Programmcodes in eine vom restlichen Programm unabhängigen Umgebung neu berechnet und als Rückgabewert an die aufrufende Stelle zurückgegeben. Zusätzlich können einer Funktion Argumente übergeben werden, welche dann innerhalb der Umgebung als Parameter verfügbar sind. Wenn eine Funktion keinen Wert zurückgeben soll, so muss sie mit dem void-Typ deklariert und definiert werden.

Selbst Operatoren (wie beispielsweise Addition, Multiplikation...) können als Funktionen verstanden werden und in C++ sogar selbst ausprogrammiert werden (siehe Operator-Überladung).

Terminologie für Funktionen

Für Funktionen gibt es viele verfeinerte Begriffe, die jedoch in den Sprachen C und C++ kaum verwendet werden. Der Begriff Prozedur beispielsweise bezeichnet eine Funktion OHNE Rückgabewert. In C und C++ ist die Deklaration einer Prozedur genau gleich wie diejenige einer Funktion, nur dass sie als Rückgabetyp das Keyword void verwendet.

Der Begriff Handler wird hauptsächlich verwendet für Funktionszeiger, wenn sie für sogenannte Callback-Functions eingesetzt werden. Ein Handler ist zu gut Deutsch eine Behandlung. Er wird auch für das Exception-Handling mittels try-catch verwendet. Der Begriff Routine ist zu verstehen als eine beliebige Befehlsfolge, welche jedoch einen in-sich-geschlossenen Charakter hat. Der Terminus wird ebenfalls oftmals verwendet für das Exception-Handling mittels der try-catch-Struktur. Im Unterschied zum Handler bezeichnet eine Routine grundsätzlich immer eine vorliegende, ausprogrammierte Befehlsfolge. Der Begriff Handler wird mit symbolischem Charakter verwendet, da er zum einen für Funktions-Pointer verwendet werden kann, dessen genauer Inhalt nicht zwingend bekannt sein muss, zum anderen, da der Begriff als allgemeiner Überbegriff im Sinne einer beliebigen Behandlung verwendet wird: Das Handling.

Vorsicht: Nebst dem Handler gibt es auch noch das Handle, was jedoch einen Pointer oder eine Referenz auf ein Objekt bezeichnet. Handle bedeutet zu gut Deutsch: Der Handgriff, die Halterung, der Henkel. Mit einem Handle lässt sich quasi ein Objekt begrapschen.

Der Begriff Sub-Routine wird in C und C++ nicht verwendet und ist hier nur der Vollständigkeit halber aufgeführt. Im eigentlichen Sinne bezeichnet eine Sub-Routine das, was in C und C++ als Funktion bezeichnet wird, allerdings hat eine Sub-Routine den Charakter einer Hilfs-Funktion. In anderen Programmiersprachen wie beispielsweise BASIC gibt es für Subroutinen eine eigene Kontrollstruktur (GOSUB), welche einen einfachen Sprung an die Adresse der Subroutine ausführt, ohne jedoch den Kontext der Variablen zu ändern. Nach Abarbeitung der Sub-Routine wird zur aufrufenden Funktion zurückgekehrt. Man könnte sagen, der Aufruf einer Sub-Routine ist ein vereinfachter Funktionsaufruf.