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.

¿Cómo inicializar un arreglo que está declarado dentro de una estructura?

Estaba desarrollando un programa en C para leer el estado de acceso a una puerta. Creé una estructura en la que se declararon dos arreglos. Quería inicializar el arreglo en el momento de la definición de esa estructura.
Por ejemplo,

Declaración de estructura en el archivo .h:

typedef volatile struct
{
uint8_t __near const * const people_in_input_ports[8];
uint8_t __near const * const people_out_input_ports[8];
} GATE_ACCESS_CTRL_BLOCK;

Definición de estructura en el archivo .c:

GATE_ACCESS_CTRL_BLOCK g_gate_acc_parameters = { 
    .people_in_input_ports  = {&P12, &P4, &P4, &P4, &P6, &P6, &P6, &P6},
    .people_out_input_ports = {&P14, &P14, &P2, &P14, &P14, &P5, &P5, &P1}
};

Aquí, P12, P4, P6, P5, P2 y P14 son direcciones sfr del puerto correspondiente.

Obtuve el siguiente error.

E0520029: Se esperaba una expresión 
E0520029: Se esperaba una expresión

¿Cómo se inicializan los arreglos que se declaran dentro de una estructura usando el nombre de los arreglos?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para inicializar arrays que se declaran dentro de una estructura utilizando el nombre de los arrays, debes modificar la declaración de la estructura como sigue:

    typedef volatile struct {
    
        uint8_t __near const * const people_in_input_ports[8];
        uint8_t __near const * const people_out_input_ports[8];
    
    } GATE_ACCESS_CTRL_BLOCK;
    

    Luego, puedes inicializar la estructura en el archivo .c utilizando los nombres de los arrays de la siguiente manera:

    const uint8_t __near P12 = 0x01;
    const uint8_t __near P4 = 0x02;
    const uint8_t __near P6 = 0x03;
    const uint8_t __near P5 = 0x04;
    const uint8_t __near P2 = 0x05;
    const uint8_t __near P14 = 0x06;
    
    GATE_ACCESS_CTRL_BLOCK g_gate_acc_parameters = {
        .people_in_input_ports = {&P12, &P4, &P4, &P4, &P6, &P6, &P6, &P6},
        .people_out_input_ports = {&P14, &P14, &P2, &P14, &P14, &P5, &P5, &P1}
    };
    

    Ten en cuenta que también necesitas declarar como variables constantes las direcciones de los puertos sfr correspondientes. En este ejemplo, las direcciones de los puertos sfr se definen como P12, P4, P6, P5, P2 y P14.

Comments are closed.