[英]How to get rid of the warning with time.h in C++?
當我用這個
#include<time.h>
//...
int n = time(0);
//...
我收到有關將時間轉換為int的警告。 有沒有辦法消除此警告?
是的,將n更改為time_t
。 如果您在大多數/所有系統上的time.h中查看簽名,就會看到它返回的內容。
#include<time.h>
//...
time_t n = time(0);
//...
請注意, Arak是正確的: 由於2038錯誤 ,使用32位int至少是一個問題。 但是,您應該考慮對整數n(而不是time_t)進行任何算術運算只會增加代碼盡早越過該錯誤的可能性。
PS:如果我在原始答案中沒有明確說明,對編譯器警告的最佳響應幾乎總是在解決您被警告的情況。 例如,將較高精度的數據強制轉換為較低精度的變量會丟失信息-編譯器試圖警告您,您可能剛剛創建了一個地雷漏洞,直到很久以后才有人絆倒。
時間返回time_t
而不是整數。 最好使用該類型,因為它可能大於int
。
如果您確實需要int
,則顯式鍵入它,例如:
int n = (int)time(0);
我認為您正在使用Visual C ++。 即使您是為與g++
不同的32bit
平台進行編程, time(0)
的返回類型也為64bit int
。 要刪除警告,只需將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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.