我有一个在32位系统下工作正常的示例代码,但是当我在64位系统上交叉编译它并尝试在64位机器上运行时,它的行为不同。
谁能告诉我为什么会这样?
#include <usr/include/time.h>
#include <sys/time.h>
void func(time_t * inputArg)
{
printf("%ld\n",*inputArg);
}
int main()
{
unsigned int input = 123456;
func((time_t *)&input);
}这里"time_t“是在linux系统库头文件中定义的一个类型,它的类型是"long int”。这段代码在32位系统上工作得很好,但在64位系统上就不行了。
对于64位,我已经尝试过了:
#include <usr/include/time.h>
#include <sys/time.h>
void func(time_t * inputArg)
{
printf("%ld\n",*inputArg);
}
int main()
{
unsigned int input = 123456;
time_t tempVar = (time_t)input
func(&tempVar);
}它工作得很好,但我已经在整个应用程序中多次使用第一种方法。任何替代解决方案都将不胜感激。
发布于 2015-04-17 15:19:57
您的“固定”代码有一个类型转换,允许编译器将您的unsigned int值转换为time_t。您的原始代码假定它们是相同的。
在您的32位系统上,它们是相同的,所以您很幸运。在您的64位系统上,您会发现当您调用未定义的行为时会发生什么。
换句话说,C和C++都允许您将指针强制转换为您想要的任何内容,但要由您来确保此类强制转换是安全的。
https://stackoverflow.com/questions/29692455
复制相似问题