En C, une fonction peut-elle exposer la mémoire qu'elle "gérait" à un niveau inférieur en lecture seule à ceux qui appellent cette fonction (en exposant son adresse). return * const
n'est pas efficace, mais je me demandais si je donnais sur une tique de programmation?Expose la mémoire en lecture seule
Merci.
const uint8_t * get_value(int index)
{
static uint8_t data[2] = {0, 0};
return (const uint8_t *)&data[index];
}
int main(void)
{
uint8_t * value;
value = get_value(1);
*value += 1;
return 0;
}
@j_random_hacker suggéré un bon compromis à ma question qui donne cette barrière supplémentaire Je cherche à empêcher une mauvaise utilisation occasionnelle de ces données.
typedef struct
{
const uint8_t * value;
const uint8_t size;
} readonly_t;
readonly_t get_value(int index, int size)
{
static uint8_t data[2] = {0, 0};
uint8_t rsize;
/* ... validate index, size params */
readonly_t r = { &data[index], rsize };
return r;
}
Je ne sais pas pourquoi c'est un wiki communautaire. – TheTXI
Mon erreur. Quelques clics ici et là un peu pour rapidement, puis soumettre - mais ne peut pas annuler. – Oliver