According to the C FAQ, hay básicamente 3 métodos prácticos para "inlining" código en C:pros y los contras de diferentes métodos función macro/en línea en C
#define MACRO(arg1, arg2) do { \
/* declarations */ \
stmt1; \
stmt2; \
/* ... */ \
} while(0) /* (no trailing ;) */
o
#define FUNC(arg1, arg2) (expr1, expr2, expr3)
Para aclarar esta uno , los argumentos se usan en las expresiones, y el operador de coma devuelve el valor de la última expresión.
o
usando la declaración inline
que está soportado como un extension to gcc and in the c99 standard.
El método do { ... } while (0)
es ampliamente utilizado en el kernel de Linux, pero no he encontrado los otros dos métodos con mucha frecuencia.
Me refiero específicamente a las "funciones" de varias declaraciones, no a las declaraciones individuales como MAX o MIN.
¿Cuáles son los pros y los contras de cada método, y por qué elegir uno sobre el otro en diversas situaciones?
El ejemplo del medio no tiene mucho sentido, la macro toma argumentos llamados arg1 y arg2, y en el macro cuerpo se usa expr1, expr2 y expr3 ? – unwind
Tiene sentido, porque los 'argN' podrían anidarse en las subexpresiones en el lado derecho. Como '(arg1^= arg2, arg2^= arg1, arg1^= arg2)', creo. –
A menos que haya medido su código y sepa que necesita optimizarlo, no se moleste: escriba funciones normales para todo. – pmg