次のコードを考慮してください。Cの構造体ポインタ間のキャスト
typedef struct{
int field_1;
int field_2;
int field_3;
int field_4;
uint8_t* data;
uint32_t data_size;
} my_struct;
void ext_function(inalterable_my_struct* ims, ...);
私は(第三者によって書かれた)ext_function
はmy_struct
にのみfield_3
とfield_4
を変更できるようにします。だから私は、次の操作を行います。
typedef struct{
const int field_1;
const int field_2;
int field_3;
int field_4;
const uint8_t* data;
const uint32_t data_size;
} inalterable_my_struct;
void ext_function(inalterable_my_struct* ims, ...);
それは(後に示すように)ext_function
を呼び出す前my_struct
とinalterable_my_struct
間のポインタをキャストしても安全ですか?
void call_ext_function(my_struct* ms){
inalterable_my_struct* ims = (inalterable_my_struct*)ms;
ext_function(ims, ...);
}
'ext_function'が' data'を変更しないようにするには、 'const uint8_t * const data;'と宣言する必要があります。 – Henrik