C-Programmierung

Funktions-Prototypen

Callbacks | | Arrays

Zur Benutzung einer Funktion muss nur deren Schnittstelle, die Signatur, bekannt sein nicht aber die Implementierung.

C erlaubt daher die Deklaration einer Funktion von deren Implementierung zu trennen. Um eine Funktion zu verwenden muss sie zumindest vorher deklariert worden sein, die Implementierung kann später erfolgen.

#include <stdio.h>

/* forward declaration (or prototype) */
unsigned int faculty(unsigned int n);

/*
read value as argument from command line
and out the faculty of the argument.
*/

int main(int argc, char *argv[])
{
   unsigned int n=0;

   /* check number of arguments */
   if (argc>=2)
      /* read n from program arguments */
      sscanf(argv[1], "%d", &n);
   else
      {
      /* input n from console */
      printf("input n: ");

      if (scanf("%ud",&n)!=1)
         return(1);
      }

   /* compute and output faculty of n */
   printf("faculty(%d)=%d\n",
          n, faculty(n)); /* function reference */

   return(0);
}

/* implementation */
unsigned int faculty(unsigned int n)
{
   if (n>1) return(n * faculty(n-1));
   else return(1);
}

Da die Deklaration vor der Implementierung erfolgt, nennt man die Deklaration der Signatur auch Funktions-Prototyp oder Forward-Deklaration. Die Benutzung einer Funktion nennt man Referenzierung. Wenn die Implementierung noch unbekannt ist, spricht man von einer unbekannten Funktions-Referenz (unsolved symbol or function reference).

Die Implementierung muss nicht in derselben Quelldatei erfolgen, sie kann auch in einer anderen Quelldatei oder Modul erfolgen. Es muss lediglich insgesamt zu jeder benutzten Funktion bzw. Referenz genau eine Implementierung vorliegen.

Funktionsprototypen ermöglichen daher die Modularisierung von Programmen.

Callbacks | | Arrays

Options: