【发布时间】:2019-05-11 18:15:17
【问题描述】:
我正在使用以下代码:
#define OFFSETOF(_s, _m) ((uint32_t)(uint32_t *)(&(((_s *)0)->_m)))
typedef struct test
{
uint16_t param0;
uint8_t param1;
} test;
uint32_t uStartAddr = OFFSETOF(test, param1);
但我得到了那个错误:
error: cast from pointer to integer of different size
【问题讨论】:
-
你为什么要编造你自己的
OFFSETOF?stddef.h已经有一个没有错误的。 -
您应该使用
muintptr_t而不是uint32_t,因为您的系统中的指针是 64 位,而不是您假设的 32 位。这就是为什么您也应该使用标准宏,而不是尝试设计自己的宏——至少在应该是“生产质量”而不是练习的代码中。offsetof()宏很奇特;它不能是一个函数。但是从地址 0 获取偏移量的地址是不确定的——它通常会起作用,但标准肯定不能保证。这就是实现定义offsetof的原因;它知道可以做什么。 -
我不能打字——我的意思是
uintptr_t,不是muintptr_t。对不起!
标签: c