Estoy tratando de instrumentar algún código para capturar e imprimir mensajes de error. Actualmente estoy usando una macro somethng así:Uso y devolución de salida en macro C
#define my_function(x) \
switch(function(x)) { \
case ERROR: \
fprintf(stderr, "Error!\n"); \
break; \
}
Normalmente, nunca capturar la salida de función y esto funciona bien. Pero he encontrado un par de casos en los que también necesito el valor de retorno de function()
. Intenté algo como lo siguiente, pero esto produce un error de sintaxis.
#define my_function(x) \
do { \
int __err = function(x); \
switch(__err) { \
case ERROR: \
fprintf(stderr, "Error!\n"); \
break; \
} \
__err; \
} while(0)
pude declarar una variable global para mantener el valor de retorno de la función, pero que se ve feo y mi programa es multiproceso, por lo que es probable que cause problemas. Espero que haya una mejor solución por ahí.
¿Por qué no lo hace una función en línea? – Job
La "salida" de una función no es lo mismo que el "valor de retorno" de una función. Quieres el valor de retorno –
A su publicación le faltan varios marcadores de continuación de línea. Ese puede ser su error de sintaxis. –