Inline-Ersetzung
Inline-Ersetzung ist bei Programmiersprachen ein Verfahren zur Steigerung der Ausführungsgeschwindigkeit, indem unnötige Aufrufe von Unterprogrammen vermieden werden. Stattdessen wird der Code der Funktion an den Stellen, wo sie aufgerufen wird, vom Compiler sozusagen einkopiert und kann so zudem bei der Optimierung voll berücksichtigt werden.
Beispiel (in der Programmiersprache C++)[Bearbeiten]
Folgender Quelltext...
inline int das_Quadrat_von(int x) {
return x*x;
}
void f(int j) {
int k = j + das_Quadrat_von(j) + 1;
int m = 2 * das_Quadrat_von(k) + 5;
int p = das_Quadrat_von(j + 1);
int q = das_Quadrat_von(++j + 2);
// ...
}
...wird vom Compiler so übersetzt, als wäre der Quelltext (ersetzte Stellen farblich hervorgehoben)
void f(int j)
{
int k = j + (j * j) + 1;
int m = 2 * (k * k) + 5;
int p = (j + 1) * (j + 1);
++j;
int q = (j + 2) * (j + 2);
// ...
}
Inline-Ersetzung erfüllt in C++ also einen ähnlichen Zweck wie ein Funktionsmakro, bietet aber zusätzlich die Sicherheit einer statischen Typprüfung wie bei Funktionen. Sie muss explizit deklariert werden und kann für von Klassen unabhängige, wie auch für Elementfunktionen (Methoden) verwendet werden. In den Interna des Compilers sind Makros und Inline-Ersetzungen jedoch nicht zu vergleichen.
Es ist für den Compiler aber nicht für jede beliebig komplizierte Funktion möglich, die vom Programmierer gewünschte Ersetzung auch durchzuführen. Dann wird der normale Funktionsaufruf beibehalten. Vielmehr ist das inline im Beispiel als Empfehlung an den Compiler zu sehen, der er aber nicht nachgehen muss. Speziell in C++ gibt es für Ausnahmefälle auch Compiler-spezifische stärkere Varianten von inline (wie z.B. __forceinline), deren Einsatz jedoch auf Kosten der Portabilität gehen kann. Ohne solche Varianten wird das Inline-Attribut jedoch von den meisten modernen Compiler zumindest bei hohen Optimierungsleveln ignoriert.
Manche Compiler können auch selbstständig für Inline-Ersetzung geeignete Funktionen in der Optimierungsphase identifizieren und expandieren. In der Programmiersprache Eiffel etwa ist nur diese automatische Inline-Ersetzung vorgesehen.