Pregunta

Será este código:

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);
}

transformado en código como el siguiente:?

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

GCC, ARM (iPhone)

¿Fue útil?

Solución

Inlining llamadas a funciones no es algo que el idioma requiere compiladores hacer. Es una cuestión de calidad de aplicación (QoI). Pero ninguna de las CGC, MSVC y sonido metálico lo hará. Por supuesto, usted tiene que permitir la optimización.

Por ejemplo

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

Otros consejos

No hay garantías cuando se utiliza inline. Se sirve simplemente como una sugerencia para el compilador (que en muchos (no todos) de los casos tienen más heurística y una mejor comprensión del impacto de la inclusión entre líneas que el programador).

No necesariamente. Depende de la configuración de compilador y supongo. De hecho en C ++, por ejemplo, no es ni siquiera garantiza que este

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

se transforma en conseguir este

int main()
{
    return 3 + 1;
}

En línea es sólo la sugerencia para el compilador. El compilador puede ignorarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top