[C con Clase] Macro para gestionar errores

Ferran Ferri ferranferri en gmail.com
Mie Mar 4 18:01:07 CET 2009


Recuerda que el compilador de C++ puede revisar la coherencia de los
tipos, cosa que las macros no hacen. Evita usar macros siempre que sea
posible y en su defecto usa una funcion inline.

Para ello, simplemente crea la funcion a tu gusto y declarala asi

inline tipoRetornado foo(argumentos)

Es decir como una funcion normal pero con la clausula inline. Esto
hace que el compilador substituya partes de codigo, igual que con las
macros, pero antes comprobara la correspondencia de los tipos que
uses.
Ferran



2009/3/4 vicente lozano <vicentelozano en gmail.com>:
> Ok, gracias por contestar.
>
> El porque define es porque vengo de C y aun no habia llegado a las
> constantes jeje.
>
> perror y sterror no las conocia aun, pero aun asi es para gestionar mis
> propios errores en las funciones.
>
> Por otro lado, para que los mensajes de error puedan ser en diferentes
> idiomas existe algo o hay que hacerlo asi?
>
> Gracias y perdonar por mi desconocimiento de las librerias, me pasa mucho lo
> de pensar algo, ponerme a hacerlo y luego descubrir que existe alguna
> funcion de libreria que podia haber usado. Espero que el capitulo de
> librerias me ayude a solucionar ese "problemilla"
>
> On Wed, Mar 4, 2009 at 4:43 PM, Programante <programante en gmail.com> wrote:
>>
>> vicente lozano escribió:
>> > Hola! Bueno me presento, soy Vicente, llevo un tiempo programando en C
>> > y estoy haciendo el curso para aprender tambien C++.
>> >
>> > Ahora mismo estoy intentando hacer una macro como esta:
>> >
>> > /...
>> > //definicion de Constante con las cadenas de error/
>> > *#define ERRORS = {"Opening file", "Writing file", " Creating
>> > Socket",...}*
>> > /..../
>> > ///definicion de macro/
>> > *#define check ( cond, errn )  if ( -1==cond ) { fprintf(stderr,
>> > "ERROR: %s.\n", ERRORS[errn]); return -1 ;}*
>> > /....
>> > //uso en el codigo/
>> > *check( fopen(...) , 0 );*
>> >
>> > La macro en si misma funciona pero no se como definir el array ERRORS
>> > con un define, no se si se podra o si sabeis alguna forma mejor de
>> > hacer lo que pretendo.
>> >
>> > Bueno saludos y gracias por adelantado.
>> ¿Por qué con un #define? Eso lo harías con una variable:
>> const char* ERRORS[] = {"Opening file", "Writing file", " Creating
>> Socket",...}
>>
>> Pero si lo que quieres es buscar errores en funciones 'normales' (con lo
>> que mirarías errno), utiliza perror() (o strerror() si quieres algo más
>> de control*). Por otro lado, ten cuidado con valores fuera de rango.
>>
>>
>> *
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>




Más información sobre la lista de distribución Cconclase