Tengo una función que necesito para macroeditar. La función contiene variables temporales y no puedo recordar si existen reglas sobre el uso de variables temporales en sustituciones de macros.¿Puede una macro C contener variables temporales?
long fooAlloc(struct foo *f, long size)
{
long i1, i2;
double *data[7];
/* do something */
return 42;
}
Formulario MACRO:
#define ALLOC_FOO(f, size) \
{\
long i1, i2;\
double *data[7];\
\
/* do something */ \
}
Es esto aceptable? (es decir, sin efectos secundarios desagradables, aparte de los usuales: no "escriba seguro", etc.). Por cierto, sé que "las macros son malas", simplemente tengo que usarlas en este caso, no tengo muchas opciones.
¿Por qué necesita macrografiarlo? Si le preocupa el rendimiento, entonces (a) es probable que se esté preocupando innecesariamente (a menos que lo haya medido realmente y haya llegado a la conclusión de que es un cuello de botella significativo) y (b) puede lograr el mismo efecto, en un tipo más de manera segura, al hacer que la función 'en línea' (algunos compiladores anteriores o de Microsoft podrían no ser compatibles con esto). –
@KeithThompson el rendimiento no es el problema aquí. Estoy escribiendo una biblioteca de extensión y necesito una función de contenedor para hacer una clasificación de datos. Las macros simplemente proporcionan una forma menos propensa a errores de generar automágicamente un gran código de "pegamento". –
'return' dentro de una macro no hace lo que parece pensar que hace. –