【发布时间】:2015-06-23 21:45:28
【问题描述】:
我有一个示例代码在 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);
}
这很好用,但我在整个应用程序中多次使用第一种方法。任何替代解决方案将不胜感激。
【问题讨论】:
-
我认为输入应该是size_t,因为64位平台上的time_t是64位数字,所以你丢失了一半的数据,编译器应该对此给出警告-实际上为什么不直接使用time_t?
-
如果是时候为什么不直接使用
time_t?这将帮助您避免许多未定义的行为
标签: c++ c pointers 64-bit 32bit-64bit