c++ - 从不同大小的整数获取到指针的警告转换

标签 c++ c

我目前正在致力于从 32 位移植到 64 位。我收到警告:

cast to pointer from integer of different size

在下面的代码中

AcLogFileWrite(
    (FILE *) pOut->pTrace->logFileHandle, /* warning in this line */
    outRecord,
    outRecordLen);

AcLogFileWrite() 的原型(prototype)是

int AcLogFileWrite(
    FILE * handle,
    char * data,
    int    bytes);

此处参数pOut->pTrace->logFileHandle的类型为int

如何解决此警告?

最佳答案

不能在 32 位 int 中存储 64 位。如果logFileHandle必须存储一个指针,唯一可以安全地做到这一点的整数类型是 uintptr_tintptr_t来自<stdint.h> 。或者您可以typedef void* 。由于无论如何您都要移植到新的 ABI,因此二进制兼容性不是问题,现在是修复它的好时机。

如果你绝对不能改变 int 类型的定义,那么你必须在ILP64下编译模型,其中int , longvoid*都是 64 位宽。

关于c++ - 从不同大小的整数获取到指针的警告转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32494062/

相关文章:

c++ - 如何在运行时将值推回 fusion vector ?

c++ - 'std::operator 中的 ‘operator<<’ 不匹配

c++ - 高阶位——把它们变成 uint64_t 变成 uint8_t

c - 在 Linux 中使用重命名来安全地覆盖共享文件

x86 输入/输出端口 I/O 的 C 内联汇编具有操作数大小不匹配

c - 在c中输入动态结构数组的malloc函数中的元素数量

c++ - 如何跳过 BOOST 单元测试?

c++ - 类构造函数中的条件 C++

c++ - 关于类内部指针的问题

C:为什么 print 语句改变了我的结构成员的值?