Domanda

Sarà questo codice:

inline int funcA(int a) __attribute__((always_inline))
{
    return a + 1;
}
inline int funcB(int b) __attribute__((always_inline))
{
    return funcA(b + 2);
}
int main()
{
    return funcB(3);
}

trasformato in codice come questo:?

int main()
{
   return ((3) + 2) + 1;
}

GCC, ARM (iPhone)

È stato utile?

Soluzione

Inlining chiamate di funzione non è qualcosa che il linguaggio richiede compilatori di fare. Si tratta di una qualità di problema di implementazione (QoI). Ma qualsiasi di GCC, MSVC e clang lo farà. Naturalmente, è necessario abilitare l'ottimizzazione.

Per esempio

# clang++ -cc1 -emit-llvm -O2 -o - main.cpp
define i32 @main() nounwind readnone {
entry:
  ret i32 6
}

Altri suggerimenti

Non ci sono garanzie quando si utilizza inline. Serve solo come un suggerimento per il compilatore (che in molti (non tutti) i casi hanno più euristica e una migliore comprensione dell'impatto delle inlining del programmatore).

Non necessariamente. Dipende del sul compilatore e le impostazioni immagino. Infatti in C ++, ad esempio non è nemmeno garantito che questo

inline int funcA(int a)
{
    return a + 1;
}
int main()
{
    return funcA(3);
}

andranno trasformato in questo

int main()
{
    return 3 + 1;
}

linea è solo il suggerimento per il compilatore. Il compilatore può ignorarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top