是否将任意整数常量转换为指向对象/函数类型的指针(例如用于单元测试)?
struct helper; //opqaue, creation the structure is complicated
struct my_struct{
struct helper *h_ptr;
char another_member;
};
static inline struct my_struct *create_my_struct(struct helper *h_ptr, char am){
struct my_struct *m_ptr = malloc(sizeof(*m_ptr));
m_ptr->h_ptr = h_ptr;
m_ptr->another_member = am;
return m_ptr;
}
我想为它编写单元测试如下:
uintptr_t helper_ptr = (uintptr_t) 2; //How about this?
char am = 'a';
struct my_struct *ms_ptr = create_my_struct((struct helper *) helper_ptr, am);
//do asserts
我不确定的是
(struct helper *) helper_ptr
。是UB吗?如果 (uintptr_t) 2
没有正确对齐怎么办? 最佳答案
来自 C11 标准 6.3.2.3 指针,第 5 段:
所以只要不取消引用就可以做到,而且它不是UB,但是发生的任何事情都取决于平台。
关于将整数常量转换为指针类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55764405/