Función en línea en C

Las funciones en línea son aquellas funciones cuyas definiciones son pequeñas y se sustituyen en el lugar donde se realiza la llamada a la función. La sustitución de funciones es una elección total del compilador.

Tomemos el siguiente ejemplo:

#include <stdio.h>
  
// Inline function in C
inline int foo()
{
    return 2;
}
  
// Driver code
int main()
{
  
    int ret;
  
    // inline function call
    ret = foo();
  
    printf("Output is: %d\n", ret);
    return 0;
}

Error del compilador:

In function `main':
undefined reference to `foo'

¿Por qué ocurrió este error?

Este es uno de los efectos secundarios de GCC en la forma en que maneja la función en línea. Cuando se compila, GCC realiza la sustitución en línea como parte de la optimización . Por lo tanto, no hay una llamada de función presente (foo) dentro de main. Verifique a continuación el código de ensamblaje que generará el compilador.

Normalmente, el alcance del archivo de GCC es «sin vinculación externa». Eso significa que la función en línea nunca se proporciona al enlazador que está causando el error del enlazador, mencionado anteriormente.

¿Cómo eliminar este error?

Para resolver este problema, use «estático» antes de en línea. El uso de la palabra clave estática obliga al compilador a considerar esta función en línea en el enlazador y, por lo tanto, el programa compila y se ejecuta correctamente.

Ejemplo:

#include <stdio.h>
  
// Inline function in C
static inline int foo()
{
    return 2;
}
  
// Driver code
int main()
{
  
    int ret;
  
    // inline function call
    ret = foo();
  
    printf("Output is: %d\n", ret);
    return 0;
}
Producción:

Output is: 2

Publicación traducida automáticamente

Artículo escrito por satya sundar sahu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *