【发布时间】:2013-10-15 13:48:31
【问题描述】:
我写了代码:
#include <inttypes.h>
int vari;
#if 1
struct xx {
uint16_t p_vari;
} st ={
.p_vari=(uint16_t)(uintptr_t)&vari,
};
#else
struct xx {
void *p_vari;
} st ={
.p_vari=&vari,
};
#endif
int main(void) {
return 0;
}
如果我尝试将地址的前 16 位写入结构, (代码的第一个变体)我得到了:
vari.c:9:3: error: initializer element is not constant
vari.c:9:3: error: (near initialization for 'st.p_vari')
如果我将地址写在 void*(代码的第二个变体)上,gcc 编译成功。
如何制作第一个变体?
我需要它,因为 gcc 不能使用 16 位寻址, 但我需要生成包含 16 位地址的结构。 我想在链接或编译时得到结果。
【问题讨论】:
-
也许可以尝试使用带有
void*和uint16_t字段的联合。