inline Funktion
-
Hallo,
Mal eine Frage. Bei inline Funktionen entscheidet doch der Compiler selbst, ob er einen Funktionsaufruf macht oder nicht. Was doch eigentlich nur Vorteile hat.
Gibt es eigentlich einen Grund, warum man nicht einfach alle Funktionen als inline deklariert (DLLs jetzt mal bewusst ausgenommen)
-
Inliner schrieb:
Gibt es eigentlich einen Grund, warum man nicht einfach alle Funktionen als inline deklariert (DLLs jetzt mal bewusst ausgenommen)
Du müsstest die inline-Funktionen alle in den Headern definieren, genauer gesagt hättest du nur noch Header und eine einzige Übersetzungseinheit für die main-Funktion. Ändere an einer kleinen unwichtigen Funktion eine Kleinigkeit, die nach außen keine Auswirkungen hat. Danach darfst du die ganze Welt neu kompilieren.
Das Header/Source-Modell ist gerade dafür da, um Compilezeit-Abhängigkeiten klein halten zu können.
-
Wenn der Compiler eine Funktion inline macht, dann kopiert er den Code der Funktion an die Stelle des Funktionsaufrufs. Dadurch wird der Programmtext viel grösser.
-
Klar. Wenn du eine Funktion inline deklarierst, muss laut ODR (one definition rule) diese Funktion auch in jeder Übersetzungseinheit definiert werden, wo diese Funktion benutzt wird. Man würde die Definition also mit in die Header-Datei packen, damit das gewährleistet ist. Das hätte dann aber zur Folge, dass viele andere Übersetzungseinheiten, die diesen Header einbinden, jedes mal neukompiliert werden müssten, wenn sich die Implementierung der Funktion ändert. Das ist natürlich nicht so toll. Deswegen gibt's ja auch die Sache mit der getrennten Übersetzung.
-
krümelkacker schrieb:
Das hätte dann aber zur Folge, dass viele andere Übersetzungseinheiten, die diesen Header einbinden, jedes mal neukompiliert werden müssten,
Wie gesagt, wenn man wirklich alle Funktionen inlined, gibts nur noch eine ÜE

-
Und wenn es nur noch eine ÜE gibt, braucht man kein
inlinemehr -- ein Paradoxon!