Usar una macro definida para devolver un valor condicionalmente tiene una desventaja donde no es aparente solo mirando que el código del cliente puede salir en el punto de la macro.¿Es una mala práctica tener una definición de macro para devolver un valor para una función?
El caso de uso que estoy considerando es escribir una comprobación de valores y error, así:
#define WRITE_CHK(file, param)\
if (!write_that_returns_zero_on_fail(file, param)) {\
handle_error();\
return false;\
}
código de cliente:
bool myfunc()
{
...
WRITE_CHK(file, param) // function might return here
...
return true;
}
Estoy ansioso por ver si los beneficios de la macro (que sería ser utilizado en muchos lugares en mi código) superaría la desventaja mencionada anteriormente. ¿Hay alternativas preferidas además de simplemente expandir (no usar la macro)?
Bueno, el enfoque habitual de C++ es hacer que la función "escribir" arroje una excepción por error, en lugar de verificar constantemente los códigos de retorno.Tiene el mismo problema de "retorno temprano potencialmente sorprendente", pero también lo hace cualquier programa que use excepciones ... – Nemo
Quiero una solución que sea c compatible –
Háganme saber por qué mi pregunta es negativa para poder mejorar las futuras –