Inline Unterschied



  • Hallo

    #include <iostream>
    using namespace std;
    
    inline int addition(int x,int y, int z);
    
    int main(){
            int i = 2;
            int j = 3;
            int k = 4;
    
            int a = addition(i,j,k);
            cout << a << endl;
            getchar();
            return 0;
    }
    
    int addition(int x, int y, int z){
            return x+y+z;
    }
    

    und

    #include <iostream>
    using namespace std;
    
    int addition(int x,int y, int z);
    
    int main(){i g
            int i = 2;
            int j = 3;
            int k = 4;
    
            int a = addition(i,j,k);
            cout << a << endl;
            getchar();
            return 0;
    }
    
    int addition(int x, int y, int z){
            return x+y+z;
    }
    

    Was ist hier der Unterschied? Ich bekomme bei beiden Programmen die selbe Ausgabe.

    9



  • MasterKey schrieb:

    Ich bekomme bei beiden Programmen die selbe Ausgabe.

    wär' auch schlimm wenn's nicht so wär 😉
    btw: schreib funktionen, die du inlinen willst, besser *vor* die funktions von der sie aufgerufen wird. das macht's so manchem compiler einfacher...



  • Das macht in dem Fall überhaupt nichts aus, ob du ein inline davorschreibst oder nicht, da dein Compiler dir die Funktion eh inline macht.

    Der Unterschied ist, dass dir eine inline-Funktionsaufruf nachher im Maschinencode durch das ersetzt wird, was in der Funktion selbst steht.



  • Also wenn da etwas anderes ausgegeben würde, würde ich mich ganz schnell beim Compiler-Hersteller beschweren. Eventuell sieht der Maschinencode des Programmes etwas anders aus, wenn du inline verwendest (aber selbst das ist nicht gesichert).

    Inline bewirkt ganz einfach, daß anstelle des Funktionsaufrufes der entsprechende Code direkt eingefügt wird. Dadurch wird das Programm mitunter kürzer und schneller. (aber moderne Compiler entscheiden meist selbst, was sie inlinen - und ignorieren deine Vorschläge)



  • Danke



  • CStoll schrieb:

    Inline bewirkt ganz einfach, daß anstelle des Funktionsaufrufes der entsprechende Code direkt eingefügt wird.

    Das bewirkt eine inline-expansion, nicht das Schlüsselwort inline. Die wirklich interessanten Unterschiede liegen in der ODR.

    Btw: Zu inline gibt es einen guten FAQ-Eintrag:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-105893.html


Log in to reply