inline in einer Lib?



  • Wie arbeitet denn das inline im VS genau? Ist das wirklich immer eine Quellcode-Ersetzung?
    Folgender Hintergrund: ich wollte Funktionen in einer statischebn Lib inline machen und hatte normal getrennt in h und cpp(also deklaration, definition) und habe dann einfach das inline bei den Deklarationen in der h-Datei gesetzt.
    Die Lib kompiliert er, aber das Projekt, welches die lib nutzt, findet dann die Funktionen nicht(nichtaufgelöstes externes Symbol blablabla ...)

    Kann man das doch irgendwie erreichen oder muss ich wirklich die Definitionen dann auch in der h-Datei machen?



  • Dann wollt ich auch generell nochmal wissen, wo das inline im VS alles stehen muss.
    Laut meinem C++ Buch nur in der Deklaration
    Nun hab ich es in Projekten aber oft bei beiden gesehen, also bei der Definition und der Deklaration. Was ist da nun richtig?


  • Mod

    Also ein inline kann der Linker normalerweise nicht ausführen.
    Damit eine Funktionwirklich als inline gesetzt wird muss die Funktion mit der Deklaration auch gleich definiert werden. D.h. der Compiler muss die Funktion komplett sehen können. Ist die Funktion extern in einem anderen Modul, kann sie vom Compiler nicht inline eingebaut werden. Es erfolgt ein normaler call.

    Bei der globalen Optimierung des MS-C++ Compilers ist dies jedoch möglich, da hier erst in der Linker Phase der eigentliche Code erzeugt wird und so der Linker ja die gesamten Funktionen sieht.

    Also hat ein inline nur dort Auswirkungen wo der gesamte Code der Funktion für den Compiler sichtbar wird. Bei einer Funktion innerhalb einer Library hat das Schlüsselwort inline keine Wirkung.
    http://www.parashift.com/c++-faq-lite/inline-functions.html


Anmelden zum Antworten