Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] [C] Definición de typedef en una cabecera y funciones sin parámetros

Estas en el tema de [C] Definición de typedef en una cabecera y funciones sin parámetros en el foro de C/C++ en Foros del Web. Necesito un poco de atención para que vean esto, porque probablemente el título sea un poco confuso, pero es el más breve que se me ...
  #1 (permalink)  
Antiguo 10/04/2013, 17:07
 
Fecha de Ingreso: mayo-2011
Mensajes: 26
Antigüedad: 13 años, 7 meses
Puntos: 1
[C] Definición de typedef en una cabecera y funciones sin parámetros

Necesito un poco de atención para que vean esto, porque probablemente el título sea un poco confuso, pero es el más breve que se me ocurrió para poder describir la situación que tengo en estos instantes.

Un poco de contexto: Yo tengo una cabecera llamada evento.h, donde tengo la estructura que estoy usando en mi programa, la definición de todas las funciones que voy a hacer en un programa que estoy desarrollando, además de una definición de las funciones base que voy a usar en mi programa, que consiste en una función void que recibe un puntero a la estructura definida, en este caso, de evento.
Código C:
Ver original
  1. /*  evento.h (extracto)*/
  2.  
  3. /* Estructura */
  4. typedef struct _evento {
  5.   int id;
  6.   char titl[60];
  7.   char desc[120];
  8.   int estado;
  9. } evento;
  10.  
  11. /* Definicion de las funciones base */
  12. typedef void (*ptr_funcion)(evento *);

Luego, un programa llamado evento.c donde tengo los cuerpos de todas las funciones que voy a usar. Y finalmente el programa principal, main.c

Dentro del header, tengo una serie de funciones que justamente usan como parámetro un puntero a la estructura evento, justamente el formato que necesito para poder usar el typedef.
Código C:
Ver original
  1. /* evento.h (extracto)*/
  2.  
  3. void mostrar_evento(evento *);
  4.  
  5. void eliminar_evento(evento *);

Pero tengo un par de funciones void que no reciben parámetro, incompatibles con el typedef declarado en la cabecera.

Código C:
Ver original
  1. /* evento.h (extracto)*/
  2.  
  3. void listar_eventos();
  4.  
  5. void vaciar_eventos();

Podría declararlas directamente en el main.c, pero al tener la declaración typedef definida, lo ideal sería que pueda usar punteros para poder realizar la llamada a estas funciones.

Con todo lo anterior, ¿alguna sugerencia para hacer las llamadas a estas funciones (que no sea de forma directa, sino que de cierto modo respetando el typedef definido en la cabecera)?

Última edición por Amphoth3ra; 10/04/2013 a las 17:21
  #2 (permalink)  
Antiguo 11/04/2013, 13:14
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: [C] Definición de typedef en una cabecera y funciones sin parámetros

Eso solo tiene sentido si lo usas para abreviar punteros a funciones, con lo que puedes solucionarlo simplemente typedefeando (me lo acabo de inventar) un nuevo tipo de funciones sin eventos

Código:
typedef void (*ptr_funcion_con_evento)(evento *);
typedef void (*ptr_funcion_sin_evento)();
Si de todas formas no quieres tipar dos funciones puedes declarar los prototipos con punteros a un evento, pero dentro de listar_eventos y vaciar_eventos simplemente se omitirá el evento (o sea que puedes enviarle 0 por defecto).

Saludos
vosk
  #3 (permalink)  
Antiguo 11/04/2013, 13:32
 
Fecha de Ingreso: mayo-2011
Mensajes: 26
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: [C] Definición de typedef en una cabecera y funciones sin parámetros

Cita:
Iniciado por vosk Ver Mensaje
Si de todas formas no quieres tipar dos funciones puedes declarar los prototipos con punteros a un evento, pero dentro de listar_eventos y vaciar_eventos simplemente se omitirá el evento (o sea que puedes enviarle 0 por defecto).
Probé con esta opción que me diste (porque la idea es dejar sin modificar la cabecera) y la llamada no sufrió mayores modificaciones respecto a no darle argumentos.

Muchas gracias =)

Saludos!

Etiquetas: definición, funcion, int, programa, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:31.