1

当我使用这个

#include<time.h>
//...
int n = time(0);
//...

我收到关于将时间转换为 int 的警告。有没有办法消除这个警告?

4

5 回答 5

20

是的,将 n 更改为 atime_t。如果您在大多数/所有系统上查看 time.h 中的签名,您会发现这就是它返回的内容。

#include<time.h>
//...
time_t n = time(0);
//...

请注意,Arak是对的:由于 2038 错误,使用 32 位 int 至少是个问题。但是,您应该考虑对整数 n(而不是 time_t)进行任何类型的算术运算只会增加您的代码过早遇到该错误的可能性。

PS:如果我在原始答案中没有说清楚,对编译器警告的最佳响应几乎总是解决您被警告的情况。例如,将精度较高的数据强制转换为精度较低的变量会丢失信息——编译器试图警告您,您可能刚刚创建了一个地雷错误,直到很久以后才会有人绊倒。

于 2009-09-27T02:44:49.437 回答
2

时间返回time_t而不是整数。最好使用该类型,因为它可能大于int.

如果你真的需要int,那么明确地进行类型转换,例如:

int n = (int)time(0);
于 2009-09-27T02:45:08.110 回答
1

我认为您正在使用 Visual C++。的返回类型time(0)64bit int即使您正在为32bit平台编程,也不像g++. 要删除警告,只需分配time(0)64bit变量。

于 2009-09-27T02:44:42.150 回答
1

您可能想要使用 time_t 类型而不是 int。

请参阅http://en.wikipedia.org/wiki/Time_t上的示例。

于 2009-09-27T02:49:24.780 回答
-1

原因是 time() 函数返回 time_t 时间,因此在这种情况下您可能需要对 int 或 uint 进行静态转换。这样写:

time_t timer;
int n = static_cast<int> (time(&timer)); // this will give you current time as an integer and it is same as time(NULL)
于 2016-10-11T21:37:23.990 回答