Cでは、その関数を呼び出す側(読み取り側)のメモリを、その関数を呼び出す側の読み取り専用レベルより低いレベルで「管理」することができます。 return * const
は有効ではありませんが、私はプログラミングティックを見落としていたのかどうか疑問に思いましたか?メモリを読み取り専用で公開する
ありがとうございました。
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は、余分なバリアが、私はそのデータのカジュアルな誤使用を防ぐために探していることを示します私の質問への良好な妥協を推奨。
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;
}
なぜこれがコミュニティのwikiであるのかわかりません。 – TheTXI
私の間違い。ここを少しクリックするだけで、すばやく簡単に送信してから送信できますが、元に戻すことはできません。 – Oliver