elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Ayuda dependencia circular en: 18 Diciembre 2022, 21:44 pm
Buenas noches

Muchas gracias por tantas respuestas, es la primera vez que escribo en un foro.

Tenéis razón, me expliqué fatal. Comienzo de nuevo

Tengo 3 módulos (cada uno con su .h y .c) con estas operaciones:

/*MODULO PARCHIS*/ Lleva una partida del juego del parchis y llama a las funciones del módulo ENTRADA_SALIDA

void parchis_iniciar (void);
void parchis_reiniciar_partida(void);
void parchis_realizar_jugada (uint8_t);
void parchis_deshacer_ultima_jugada(void);

--funciones exclusivas de PARCHIS (sólo en el PARCHIS.c)
static uint8_t comprobar_casilla_vacia(tablero);
static uint8_t  comprobar_ficha_jugador(tablero);
--datos exclusivos de PARCHIS (sólo en PARCHIS.c)
uint8_t tablero[TABLERO_SIZE];

/*MODULO ENTRADA_SALIDA*/ Externaliza visualmente cosas que le pide el módulo de parchis. Ej: ver el turno, mostrar fin de partida, mostrar un mensaje concreto (bytes)... Se supone que el PARCHIS es independiente de la implementación de este módulo, en este caso muestra por UART, pero podrían ser unos LEDS, un sistema neumático, unas gafas de realidad virtual,... y parchis no tendría por qué saberlo

void ES_encender_turno(uint8_t jugador);
... irrelevantes...
void ES_mostrar_mensaje(char *mensaje) --> muestra mensaje por una UART

/*SUBMODULO PARCHIS+/
char* submodulo_parchis_formatear_tablero(void); --> accede a métodos y datos privados del módulo parchis para formatear el tablero y dejarlo bonido para enviarlo por la UART
--
Me han pedido imprimir por la UART el tablero de parchis, por tanto debo usar ES_mostrar_mensaje(,,,), pero me dicen que el módulo PARCHIS no debe encargarse del formato del tablero, sino que debe ser un módulo aparte (submodulo_parchis).

Así, dentro de una función como parchis_realizar_jugada(), deberá mostrarse el tablero tras invocarse el modulo ENTRADA_SALIDA, que no conoce su formato, por lo que debe llegarle un mensaje con un formato en ascii ya disponible para imprimir(algo como ES_mostrar_mensaje(submodulo_parchis_formatear_tablero()).

El problema es que este submódulo debe acceder al tablero (sólo en el .c) y a funciones que ayudan a reconocer el tablero (sólo en el .c de parchis. Ej: comprobar_casilla_vacia(tablero)), y me está dando problemas el que este submódulo acceda a estos métodos privados del módulo parchis. Me ocurren problemas con dependencias circulares, y con redefiniciones de funciones y no sé como arreglarlo.

Puedo cambiar el esquema, añadir módulos,... pero es necesario que exista este submódulo que acceda a las funciones y datos ocultos del parchis.

Un saludo y muchas gracias por responder a todos

2  Programación / Programación C/C++ / Ayuda dependencia circular en: 17 Diciembre 2022, 11:21 am
Buenos días

Tengo un problemita por si vosotros seres de luz podeis ayudarme

Tengo que hacer un proyecto de programación en el que todo debe ser lo más modular posible.
Hay un módulo de un juego (un parchis) y otros que le complementan para hacer una partida, en concreto uno que se llama control_Entrada_Salida (al que se llama dentro de parchis).

El problema es que necesito hacer un submódulo del parchis que formatee la información del parchis es decir, un submódulo que accede a datos y funciones del módulo parchis, y que el control_Entrada_Salida muestre esos datos por pantalla (o por donde sea, de eso no me encargo)

Me han obligado a hacerlo así, yo directamente metería el submódulo dentro del parchís y a correr...

De esta forma, con este concepto de modularidad; me ocurren dependencias circulares que no sé como evitar, y no sé como enfocarlo

1)
..llamada dentro del módulo parchis..
funcion_control_Entrada_Salida_mostrar(funcion_submódulo_formateado_parchis() )

dependencia circular: parchis  -> submodulo_parchis -> parchis (hace uso de sus funciones, por lo que quedan redeclaradas)-> control_Entrada_Salida

2)
..llamada dentro del módulo parchis..
funcion_control_Entrada_Salida()
..llamada dentro de funcion_control_Entrada_Salida()..
funcion_submódulo_formateado_parchis()

sigue habiendo dependencia circular: parchis -> control_Entrada_Salida -> submodulo_parchis -> parchis (hace uso de datos y funciones, redeclarados)

Os agradecería mucho una respuesta, me estoy volviendo loco XDDDD ;-) :rolleyes:

Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines