我写了代码:
#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 位地址的结构。我想在链接或编译时得到结果。