Funktionsaufruf-Operator ()

Der Funktionsaufruf-Operator ruft eine Funktion mit einer Argumentenliste auf. Die aufzurufende Funktion steht dabei links von runden Klammern () und die Argunentenliste steht innerhalb der Klammern.









2
#include <stdio.h>

int get_addition(int a, int b){
  return a+b;
}

int main(){
  int result = get_addition(1, 1);
  printf("%d\n", result);
  return 0;
}

Details

Der Funktionsaufruf-Operator erwartet links entweder einen lvalue oder rvalue: Eine Referenz auf eine definierte Funktion (ein Funktionsname), oder aber einen Funktionspointer. Innerhalb der runden Klammern () wird eine Argunentenliste erwartet (die leer sein kann). Der Operator wird von links nach rechts abgearbeitet. Der Rückgabewert entspricht dem Rückgabewert der Funktion und kann unter C nur ein rvalue, unter C++ zusätzlich auch ein lvalue sein.

Normalerweise befindet sich auf der linken Seite des Funktionsaufruf-Operators ein Symbol, zu welchem eine Funktion deklariert und definiert wurde. Der links erwartete Operand kann jedoch auch ein Funktions-Pointer sein, welcher durch den Funktionsaufruf-Operator automatisch dereferenziert wird. So ist es beispielsweise möglich, einen Funktions-Pointer aus einem Array oder gar aus dem Rückgabewert einer anderen Funktion zu erhalten:

















10

2
#include <stdio.h>

int get_addition(int a, int b){return a+b;}
int get_subtraction(int a, int b){return a-b;}

int (*getFunc(char op))(int a, int b) {
  switch(op){
  case '+': return &get_addition; break;
  case '-': return &get_subtraction; break;
  }
  return NULL;
}

int main(){
  int result;
  result = getFunc('+')(6, 4);
  printf("%d\n", result);
  result = getFunc('-')(6, 4);
  printf("%d\n", result);
  return 0;
}

Solche Konstrukte mit Funktions-Pointern sind jedoch eher selten und tendentiell umständlich zu programmieren. Genaueres kann bei den Funktions-Pointern nachgelesen werden.

Die Argumentenliste kann entweder leer sein, oder eine durch Komma , getrennte Liste von Argumenten, welche an die Funktion übergeben werden sollen. Es ist zu beachten, dass es sich hierbei NICHT um den Sequenz-Operator handelt, sondern um eine einfache Auflistung mittels Komma. Die Anzahl Argumente muss dabei der Deklaration der aufzurufenden Funktion entsprechen. Wenn es sich bei der Funktion um eine variadische Funktion handelt, können beliebig viele Argumente übergeben werden. Die Übergabe von Argumenten bedeutet, dass im Bereich der Funktion die Parameter mit den Argumenten initialisiert werden. Auf welche Art die Argumente übergeben werden können, kann bei den Argumenten und Parametern nachgelesen werden.