es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma de pasar una estructura local como argumento a una función en C (C11)?

Tengo una función (attempt_volume_exchange_move) en la que defino una estructura (status). Quiero pasar las variables status a una función que llamo dentro de attempt_volume_exchange_move (store_box_properties). Al intentar escribir el código para store_box_properties, recibo el siguiente mensaje de advertencia en CLion:

La declaración de ‘struct status’ no será visible fuera de esta función.

El código que ilustra mi problema sigue a continuación:

struct boxes {
    // Miembro 1
    // Miembro 2
    // Miembro 3
    // ...
    // Miembro N
} box_dense, box_rare;

void attempt_volume_exchange_move(void) {
    struct status {
        struct boxes box_dense, box_rare;
    } original, new;

    store_box_properties(&original.box_dense);
    store_box_properties(&original.box_rare);
}

void store_box_properties(struct status *status_pointer) { // Línea donde se da el mensaje de advertencia
    // Código para store_box_properties
}

¿Cómo puedo abordar este problema? Pensé en hacer de status una estructura global; sin embargo, eso parece ser inútil ya que la definición de status solo tiene sentido dentro del alcance de attempt_volume_exchange_move. Estoy tratando de abordar esto de la manera más “correcta”/”apropiada”/”elegante” posible.

¡Gracias de antemano por cualquier idea!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para abordar este problema, puede hacer que “estado” sea un parámetro de la función “store_box_properties”. De esta manera, la estructura “estado” será visible para la función “store_box_properties”. El código se vería así:


    struct cajas { // Miembro 1 // Miembro 2 // Miembro 3 // ... // Miembro N } caja_densa, caja_rara; void intentar_un_movimiento_de_cambio_de_volumen(void) { struct estado { struct cajas caja_densa, caja_rara; } original, nuevo; store_box_properties(&original.box_densa, &original); store_box_properties(&original.box_rara, &original); } void store_box_properties(struct cajas *puntero_caja, struct estado *puntero_estado) { // Código para store_box_properties }

Comments are closed.