如何摆脱C ++的时间来摆脱警告?
-
18-09-2019 - |
题
当我使用这个
#include<time.h>
//...
int n = time(0);
//...
我会警告将时间转换为int。有没有办法删除此警告?
解决方案
时间返回 time_t
而不是整数。最好使用该类型,因为它可能大于 int
.
如果您真的需要 int
, ,然后将其明确打字,例如:
int n = (int)time(0);
其他提示
是的,将N更改为一个 time_t
. 。如果您在大多数 /所有系统上查看签名。H,您会发现这就是它的返回。
#include<time.h>
//...
time_t n = time(0);
//...
注意 阿拉克 是正确的:使用32位int是一个问题,至少是一个问题 由于2038错误. 。但是,您应该考虑整数n(而不是time_t)上的任何算术都只会增加代码会尽早越过该错误的概率。
PS:如果我在原始答案中没有清楚地表明,对编译器警告的最佳响应几乎总是是解决您要警告的情况。例如,将较高的精度数据迫使较低的精度变量丢失信息 - 编译器试图警告您,您可能刚刚创建了一个地雷错误,直到很久以后,有人才会绊倒。
我认为您正在使用Visual C ++。返回类型的 time(0)
是 64bit int
即使您正在编程 32bit
平台不同 g++
. 。要删除警告,只需分配 time(0)
至 64bit
多变的。
您可能想使用time_t类型而不是int。
原因是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)
不隶属于 StackOverflow