C++ 错误:从int(*)(const char*,stat*)转换为无符号int将丢失精度

C++ 错误:从int(*)(const char*,stat*)转换为无符号int将丢失精度,c++,C++,我试图在32位和64位模式下编译下面的代码。 但这里的问题是,32位没有问题,64位有编译错误 请告诉我您对64位模式下成功编译的建议 #include<stdarg.h> #include<stdio.h> #include "sys/stat.h" int main(void) { int val; val = int((unsigned(stat)>>8))&0xff; printf("val = %d\n", val);

我试图在32位和64位模式下编译下面的代码。 但这里的问题是,32位没有问题,64位有编译错误

请告诉我您对64位模式下成功编译的建议

#include<stdarg.h>
#include<stdio.h>
#include "sys/stat.h"

int main(void)
{
  int val;

  val = int((unsigned(stat)>>8))&0xff;
  printf("val =  %d\n",  val);

  return 0;
}

 [avinta@la-lnx61dev01 ~]$ g++ -m64 bit_ops.cpp
 bit_ops.cpp: In function âint main()â:
 bit_ops.cpp:9: error: cast from âint (*)(const char*, stat*)throw ()â to     âunsigned intâ loses precision
 [avinta@la-lnx61dev01 ~]$
#包括
#包括
#包括“系统/状态h”
内部主(空)
{
int-val;
val=int((无符号(stat)>>8))&0xff;
printf(“val=%d\n”,val);
返回0;
}
[avinta@la-lnx61dev01~]$g++-m64位_ops.cpp
bit_ops.cpp:在函数–int main()中–中:
bit_ops.cpp:9:错误:从-int(*)(const char*,stat*)throw()转换为-unsigned int将失去精度
[avinta@la-lnx61dev01~]$

您成功地包含了
sys/stat.h
,该函数允许您访问以下函数:
int stat(const char*path,struct stat*buf)您试图将其地址强制转换为未签名的。在32位平台上,这是可以的(因为地址和
无符号
可能都是32位值),但对于64位,无符号^(可能)是32位,地址是64位。这就是编译器抱怨精度下降的原因

请参阅有关stat的更多信息:


但是,您为什么要在按位操作中强制转换函数的地址呢?

您成功地包括了
sys/stat.h
,这使您能够访问函数:
int stat(const char*path,struct stat*buf)您试图将其地址强制转换为未签名的。在32位平台上,这是可以的(因为地址和
无符号
可能都是32位值),但对于64位,无符号^(可能)是32位,地址是64位。这就是编译器抱怨精度下降的原因

请参阅有关stat的更多信息:


但是,为什么要在按位操作中强制转换函数的地址呢?

可能需要阅读以下内容。和/或描述您正在尝试执行的操作,因为您发布的代码有一个编译器成功诊断的错误,可能会被读取。和/或描述您正在尝试执行的操作,因为您发布的代码有一个编译器成功诊断的错误DHI,非常感谢您的建议/回答。实际上,我们正在将一个现有项目从32位移植到64位。上面的典型代码行已经在projectum中了。。。。我仍然不清楚为什么要强制转换函数的地址?我不知道。它已经存在。嗨,非常感谢你的建议/回答。实际上,我们正在将一个现有项目从32位移植到64位。上面的典型代码行已经在projectum中了。。。。我仍然不清楚为什么要强制转换函数的地址?我不知道。它已经是现有的代码