struct libimg
{
Elf32_Phdr ph;
};
struct libimg limg = {
{
p_type: PT_LOAD,
p_memsz: 2 * PAGE_SIZE
}
};
static void makelib(void *r)
{
limg.ph.p_vaddr = r;
}
并且Elf32_Phdr
在linux/elf.h
中定义
typedef struct elf32_phdr{
Elf32_Addr p_vaddr;
....
} Elf32_Phdr;
我想从参数中分配p_vaddr
值。但我收到此警告赋值从指针生成整数而不进行强制转换
。我使用 gdb 检查并 print r
显示 (void *)0x08040000
最佳答案
编译器警告您赋值导致了隐式转换。这样做是因为这可能是无意的,并且可能会产生不良影响。您可以首先使用正确的类型来纠正这个问题:
static void makelib(Elf32_Addr r)
{
limg.ph.p_vaddr = r;
}
这可能会导致其他代码行生成警告,您应该在这些地方使用强制转换,例如:
makelib((Elf32_Addr)someVariable);
这个想法是在将值的含义从类型 A 更改为类型 B 的地方进行转换,这是一个简洁、深思熟虑的决定。仅当您一开始就无法使用正确的类型(即 someVariable
不能是 Elf32_Addr
)时,您才应该这样做(强制转换)。
关于c - 赋值从指针生成整数,无需强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33031137/