下面是触发警告的代码(public_mbd是一个struct multiboot_info):
multiboot_uint64_t* fadr;
fadr=(multiboot_uint64_t*)public_mbd->framebuffer_addr;framebuffer_addr和结构的定义如下:
struct multiboot_info{
...
multiboot_uint64_t framebuffer_addr;
...
} gcc说:
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]我被这事弄糊涂了。fadr不是multiboot_uint64_t*吗?它们是一样大小的!
发布于 2020-07-23 05:18:31
这句话
public_mbd->framebuffer_addr是类型
multiboot_uint64_t尝试将其转换为(multiboot_uint64_t*)类型,即指向multiboot_uint64_t的指针。在您的体系结构中,multiboot_uint64_t和指针类型有不同的大小,但这并不重要;从类型直接转换到指向该类型的指针几乎从来都不是正确的做法。
也许您希望变量fadr指向public_mbd->framebuffer_addr。你可以通过
fadr = &(public_mbd->framebuffer_addr);另外,当然,您可以完全避免指针并编写
multiboot_uint64_t fadr;
fadr = public_mbd->framebuffer_addr;另一种可能是结构被错误地指定。如果希望framebuffer_addr字段本身成为指针,则需要编写
struct multiboot_info{
...
multiboot_uint64_t* framebuffer_addr;
...
} 发布于 2020-07-23 04:21:58
问题不在于faddr。问题在于演员们。
从类型上看,multiboot_uint64_t framebuffer_addr显然是64位。从警告中我们可以猜到,对于您的构建,指针是32位。因此,警告告诉您,您正在将64位int转换为32位指针。
https://stackoverflow.com/questions/63046773
复制相似问题