7.7    Inline-Funktionen

Wenn Sie eine Funktion in C mit dem Schlüsselwort inline definieren, soll diese möglichst schnell aufgerufen werden. Dies kann beispielsweise dadurch erfolgen, dass diese Funktion nicht mehr als eigenständiger Code abgelegt wird und extra aufgerufen werden muss, sondern an der entsprechenden Stelle des Funktionsaufrufes direkt eingefügt wird.

Hierzu zunächst ein Programmbeispiel:

00  // Kapitel7/inline_beispiel.c
01 #include <stdio.h>

02 inline double kreisflaeche(double r) {
03 return 3.14159265358979323846 * r * r;
04 }

05 int main(void) {
06 double radius = 1.0, flaeche = 0.0;
07 for(int i = 0; i < 100; i++) {
08 flaeche = kreisflaeche(radius);
09 printf("Radius: %lf Flaeche: %lf\n", radius, flaeche);
10 radius += 1.0;
11 }
12 return 0;
13 }

Listing 7.7    Das letzte Beispiel demonstriert das Verwenden von inline-Funktionen.

Die Funktion kreisflaeche() in den Zeilen (02) bis (04) wurde mit dem Schlüsselwort inline versehen. Mit diesem weisen Sie den Compiler an, den Code der inline-Funktion möglichst schnell auszuführen. Eine solche Optimierung könnte beispielsweise sein, den Code direkt an der Stelle einzufügen (engl. inline substitution), an der diese Funktion aufgerufen wird. In dem letzten Beispiel könnte somit beim Komplieren der Code der Funktion in Zeile (08) eingefügt werden, wo diese in einer Schleife hundertmal aufgerufen wird.

Der Compiler kann ein inline allerdings auch ignorieren und diese Funktion wie eine normale Funktion behandeln. Mit dem Schlüsselwort inline schlagen Sie dem Compiler nur vor, diese Funktion doch inline zu verwenden und eine Substitution durchzuführen. Welche Funktionen der Compiler allerdings als inline behandelt und an welcher Stelle eine Substitution durchgeführt wird, entscheidet er letztendlich selbst. In der Praxis sollten Sie inline-Funktionen möglichst klein halten. Dann stehen die Chancen gut, dass der Compiler sie auch tatsächlich inline in das Programm einbaut. Wie genau das Schlüsselwort inline vom Compiler behandelt wird, hängt von seiner Implementierung ab.