【发布时间】:2012-12-03 14:58:52
【问题描述】:
请考虑以下代码。
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;