Tengo una pregunta sobre la variable estática en lenguaje C. Por ejemplo, hay dos archivos, uno es "Action.c" y otro es "Result.c"

[Archivo In Action.c] '

static uint8_t actionResult[10] = {0x00};
void getActionResult (uint8_t** resultPtr)
{
    *resultPtr = actionResult;
}

[En Result.c]

void main (void)
{
    uint8_t* getResultPtr = NULL;
    getActionResult(&getResultPtr);
}

Quiero saber que este es un método legal para obtener valor del archivo "Action.c" o no. ¿Y también quiere saber transferir la dirección variable estática a otro archivo es una mala idea o no?

Muchas gracias.

2
Griffith Chen 22 oct. 2019 a las 10:48

1 respuesta

La mejor respuesta

Es legal Si. Una variable estática a nivel de archivo no se puede ver desde fuera de una unidad de traducción pero, si esa unidad de traducción publica la dirección de alguna manera (como usted lo ha hecho), se puede acceder a ella o cambiarla desreferenciando esa dirección.

¿Es una buena idea? Realmente no. El punto de las estadísticas a nivel de archivo es protegerlos de cosas fuera de la unidad de traducción. Si va a permitir esto, realmente no tiene sentido marcarlo como estático.

Simplemente defínalo como uint8_t actionResult[10] = {0x00}; y haga que main use el nombre de la variable en lugar de obtener y desreferenciar su dirección.

1
paxdiablo 22 oct. 2019 a las 07:57