簡體   English   中英

如何在C ++中使用time.h擺脫警告?

[英]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類型。

請參見http://en.wikipedia.org/wiki/Time_t上的示例。

原因是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM