Las funciones en línea tienen muchas ventajas sobre las macros del preprocesador:
-
Comprobación de tipo . El compilador se quejará si los argumentos son de tipo incorrecto.
-
Sin riesgo de evaluación múltiple : las macros pueden ser peligrosas cuando el argumento es una expresión, considere:
#include <stdio.h>
#define square(n) ((n)*(n))
int main(void)
{
int x, i = 0;
while (i < 10) {
x = square(i++);
printf("%d\r\n", x);
}
return 0;
}
- Puede incluir varias líneas de código sin interrumpir las reacciones.
- Las funciones en línea tienen su ámbito propio para las variables y pueden devolver un valor .
Las macros pueden ser útiles, por ejemplo. al concatenar tokens en código, a fin de simplificar algunas declaraciones complejas.
Considere las macros como una simple función de reemplazo de texto. Una buena regla general es evitar las macros similares a funciones, a menos que no haya otra solución viable .
Es un error común pensar que la inscripción siempre es igual a un código más rápido. Tenga en cuenta que cada llamada en línea desde más de un lugar se suma al tamaño del código . Optimización prematura no es una virtud, incluso cuando se trabaja con los recursos limitados de un microcontrolador.
GCC interpreta la palabra clave inline
como una simple sugerencia. No hay garantía de que la función esté realmente en línea. Para que GCC integre su función independientemente del nivel de optimización, declare la función con el atributo always_inline
:
void function() __attribute__((always_inline));