Ho eseguito test di chiamate in linea in C++.Funzioni inline C++ tramite GCC - perché la CHIAMATA?
Thread model: win32
gcc version 4.3.3 (4.3.3-tdm-1 mingw32)
Stroustrup in The wirtes linguaggio di programmazione C++:
L'identificatore di linea è un suggerimento per il compilatore che dovrebbe tentare di generare il codice [...] in linea piuttosto che recante il codice per la funzione una volta e quindi chiamando il solito meccanismo di chiamata di funzione.
Tuttavia, ho scoperto che il codice generato non è semplicemente in linea. C'è un CALL instrction per la funzione isquare.
alt text http://i42.tinypic.com/8ys3f4.jpg
Perché succede questo? Come posso usare le funzioni inline allora?
EDIT: Le opzioni della riga di comando utilizzate:
**** Build of configuration Debug for project InlineCpp ****
**** Internal Builder is used for build ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -osrc\InlineCpp.o ..\src\InlineCpp.cpp
g++ -oInlineCpp.exe src\InlineCpp.o
Hai controllato quale codice viene generato quando aumenti il livello di ottimizzazione? Inoltre, prova ad aggiungere il parametro '-finline-functions' durante la compilazione del codice – Christoph
Si prega di postare le opzioni della riga di comando utilizzate con gcc per compilare il codice. (Se non stai usando una delle funzioni -O3 o -finline allora gcc ignorando "in linea" non mi sorprende). – timday
il problema è -O0 hai i tuoi flag del compilatore, che significa ** no ** ottimizzazioni. Passa a -O2 e sarà inline bene. –