cand sunt functiile facut inline?

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
User avatar
dumion
Membru
Membru
Posts: 74
Joined: 25 Jul 2007, 10:17

cand sunt functiile facut inline?

Post by dumion » 15 Oct 2008, 09:11

Intrebare mea e cand sunt facute functiile inline? La compilare sau la alt moment de timp?



User avatar
maximghe
Membru
Membru
Posts: 139
Joined: 10 Aug 2007, 23:54

Re: cand sunt functiile facut inline?

Post by maximghe » 15 Oct 2008, 10:56

MSDN
The inline and __inline specifiers instruct the compiler to insert a copy of the function body into each place the function is called.
Deci daca "instruieste" pe compilator sa faca ceva, atunci clar, acel ceva se face la copile-time. ;)

Dark
Banned
Banned
Posts: 75
Joined: 21 Nov 2007, 19:29
Judet: Bucureşti

Re: cand sunt functiile facut inline?

Post by Dark » 15 Oct 2008, 19:16

Pot fi facute si la link-time, daca folosesti link-time code generation, si evident pot sa nu fie facute deloc. De fapt "inline" si "__inline" nu instruiesc compilatorul sa faca nimic, orice compilator din era noastra se prinde si singur daca o functie merita facuta inline si fara sa-i spui tu, si poate sa te ignore linistit daca i se pare ca o functie nu merita sa fie inline, chiar daca i-ai pus calificatorul ala. In fiecare compilator exista un mod de a-ti impune vointa daca te crezi mai destept decit el, cum e __forceinline in VC, dar nu exista un mod universal (adica definit de standard).

Singurul lucru util pe care-l face inline in practica e sa potoleasca warning-urile gen "local function has been removed". De exemplu ai o functie numita Log() pe care o definesti printr-un header ca s-o ai la indemina, dar n-o folosesti in toate cpp-urile care includ header-ul ala. Daca o declari asa:

Code: Select all

static void Log(const char* fmt, ...) { /* cod */ }
o sa primesti injuraturi de genul:
VC++ 2005 cu warning level 4, singurul nivel de warning care ar trebui sa existe wrote: warning C4505: 'Log' : unreferenced local function has been removed
Daca in schimb zici si ca-i inline, il faci sa taca:

Code: Select all

static inline void Log(const char* fmt, ...) { /* cod */ }

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: cand sunt functiile facut inline?

Post by Marius Bancila » 16 Oct 2008, 08:53

Daca e sa fim corecti, nici macar nu exista functii inline. Ce se face inline e de fapt apelul. Cum zicea si Dark, compilatorul e cel care decide ce se intampla. Pe langa faptul ca poate face inline apeluri de functii nemarcare inline, sau sa nu faca inline unele care sunt inline, partea interesanta e ca uneori poate face un apel la o functie inline, si alt apel la aceiasi functie sa nu-l faca inline.

Pe langa asta, o functie mai poate fi facuta inline si la run-time. Daca folosesti profile guided optimization, in functie de rezultatele rularii, compilatorul sau linkeditorul pot decide sa faca inline unele apeluri, printre alte optimizari.
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

Dark
Banned
Banned
Posts: 75
Joined: 21 Nov 2007, 19:29
Judet: Bucureşti

Re: cand sunt functiile facut inline?

Post by Dark » 16 Oct 2008, 10:59

Marius Bancila wrote: Pe langa asta, o functie mai poate fi facuta inline si la run-time. Daca folosesti profile guided optimization [...]
Adica decizia e influentata de rularea programului, dar functia este facuta inline abia data viitoare cind compilezi (linkezi) programul; nu se schimba codul la runtime sa fie inserata functia aia prin alte functii.

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: cand sunt functiile facut inline?

Post by Marius Bancila » 16 Oct 2008, 12:41

Corect; asa e. Poate exprimarea mea a lasat de dorit.
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

User avatar
dumion
Membru
Membru
Posts: 74
Joined: 25 Jul 2007, 10:17

Re: cand sunt functiile facut inline?

Post by dumion » 16 Oct 2008, 14:28

Se pare ca e mai complex putin decat ma asteptam. Oricum perspectiva e interesanta. Mersi. ;)

Post Reply