c - 赋值从指针生成整数,无需强制转换

标签 c pointers casting

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_Phdrlinux/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/

相关文章:

c - 找到可能的总和数的有效方法

c - 生成表中元素的所有组合(语言 C)

在 C 中不使用 strcpy 将字符指针复制到另一个字符指针

c++ - 为什么 Clang 将显式强制转换解释为隐式强制转换?

概念思想 - 应用程序的内存有限,但需要传递更多数据

c - 在 malloc 实体内存块中使用标准数组索引

c - 指向字符串的指针

c - 链接列表、干扰控制台

java - 一般地覆盖Java中的方法

c - 预递增的字符指针在递增后都指向相同的地址?