Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Funktionsaufruf in inline Funktion

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.07.2007, 01:13 Uhr
tobb



Hi,

kann man ruhigen Gewissens eine Funktion, die einzig und alleine eine andere Aufruft, als inline definieren?

Beispiel:

Code:
inline void Draw(BITMAP *Image, int PosX, int PosY)
{
    blit(Image, screen, 0, 0, PosX, PosY, Image->w, Image->h);
}



Schafft das jeder Compiler oder könnte das ab und an kritisch werden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.07.2007, 08:57 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Du kannst soviel inline definieren wie du willst. Normalerweise hat der Compiler die Entscheidung darüberob er das wirklich inline macht oder nicht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.07.2007, 12:46 Uhr
0xdeadbeef
Gott
(Operator)


Kommt ein bisschen auf die Sprache an, was das macht. In C ist zu beachten, dass inline-Funktionen (die es übrigens erst in C99 gibt) statische linkage haben, d.h. nur im jeweiligen Modul verfügbar sind.

In C++ ist es etwas komplizierter - inline-Funktionen habe da externe linkage. Die Funktion muss für definiertes Verhalten dann in allen Modulen, die sie benutzen, gleich definiert sein, und das Symbol hat dann im gesamten Prozess die gleiche Adresse. Da wird ein bisschen Linkermagie gezogen

Außerdem kann der Compiler die Funktion aus Modulen, in denen sie nicht benutzt wird, wegoptimieren - das ist aber eigentlich nie wirklich von Bedeutung. Im Moment fällt mir als einziges caveat ein, eine DLL zu bauen, die ein inline-Symbol exportiert...aber in dem Fall macht es erstaunlich wenig Sinn, die Funktion inline zu deklarieren, also meh.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.07.2007, 13:17 Uhr
tobb



Inter, extern... das ist doch egal... inline Funktionen kommen in einer Headerdatei, dann muss nichts mehr exportiert werden...

Nochmal zur Frage:
Würdet ihr sage gcc und MS Visucal C++ 2005 schaffen es, diese Funktion als inline zu übersetzen?
Eigentlich sieht sie so aus (steht in einem Header)

Code:
//screen ist ein globaler Zeiger
    tE_EXPORT class GraphicObject
    {
    public:
        inline virtual void Draw()
        {
            blit(Image, screen, 0, 0, PosX, PosY, Image->w, Image->h);
        }
    private:
        int PosX;
        int PosY;
        BITMAP *Image;
    };


Dieser Post wurde am 17.07.2007 um 13:19 Uhr von tobb editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.07.2007, 13:26 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


zumindest wenn er optimized schon, könnte nur wegen dem virtual ignoriert werden
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.07.2007, 14:49 Uhr
tobb



So lange ich nicht mit Zeigern oder Referenzen arbeite, sollte der Compiler doch wissen um welche Klasse (ab Basis oder eine Abgeleitete) es sich handelt und dementsprechend den Code durch die entsprechenden inline Funktion zu erstze...

Klar, bei sowas wir kein inline verwendet:

Code:
// class Basis...
// class Abgeleitet : public Basis...

void foo(Basis *Pointer)
{
    //Der Compiler weiß ja beim Compillieren garnicht, welche Inline funktion er nehmen soll
    Pointer->InlineFunction();
}


int main()
{
    Abgeleitet Object;
    foo(&Object);
    return 0;
}



Ist doch so, oder?

Dieser Post wurde am 17.07.2007 um 15:11 Uhr von tobb editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: