[C con Clase] Macro para gestionar errores
Steven Davidson
srd4121 en njit.edu
Vie Mar 6 18:36:37 CET 2009
Hola Vicente,
vicente lozano wrote:
> Vale, ahora entiendo la diferencia y la utilidad de ?, gracias.
>
> Solo por si alguien lo lee despues, creo que los dos codigos no hacen
> lo mismo:
>
> 1) *if ( -1==cond ) { fprintf(stderr, "ERROR: %s.\n", ERRORS[errn]);
> return -1 ;}
> *Que tabulado seria esto
> *if* *(* /-1/*==*cond* )*
> *{*
> fprintf(stderr, /"ERROR: %s.\n"/, ERRORS[errn])*;*
> return /-1/ *;*
> *}*
>
> 2) -1==cond ? fprintf(stderr, "ERROR: %s.\n", ERRORS[errn]) : -1
> Que es equivalente a declarar esta funcion: (pongo ints en lugar de
> bools porque todavia no tengo muy claro en C++ como va)
> * int* interrogante ( *int *exprBool )
> *{*
> *if (* cond *)*
> *return(* fprintf(stderr, /"ERROR: %s.\n"/, ERRORS[errn])* );*
> * else*
> *return* /-1/*;*
> * }
> *Y utilizarla luego asi:
> * interrogante(/ -1/ ==* cond *);
> *
> Espero no haberme equivocado, solo lo pongo por evitar posibles
> confusiones en posteriores lecturas del hilo.
>
Tienes toda la razón del mundo. Me equivoqué al interpretar el código.
Entonces la expresión equivalente a la sentencia 'if' que hiciste sería así:
#define check(cond,errn)\
( (-1==cond ? fprintf(stderr, "ERROR: %s.\n", ERRORS[errn]) : 0), -1 )
Con esto forzamos un "retorno" de -1. No estoy muy seguro por qué
quieres retornar -1, pero esta macro lo haría.
Ahora bien, si querías usar este código dentro de una función, como
puede ser 'main()', entonces esa sentencia 'return' de tu macro original
sí tiene repercusiones fuera del contexto de esta macro. Me temo que no
podemos sustituir esa funcionalidad con código estrictamente escrito en
C++. Supongo que podríamos usar la función 'exit()' si usamos la macro
en 'main()'.
Perdonad la confusión que podría haber ocasionado con mi despiste.
Hasta pronto,
Steven
Más información sobre la lista de distribución Cconclase