请考虑以下代码。
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