1

これを使うと

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

時間をintに変換することについての警告が表示されます。この警告を削除する方法はありますか?

4

5 に答える 5

20

はい、nをに変更しますtime_t。ほとんど/すべてのシステムでtime.hの署名を見ると、それが返されるものであることがわかります。

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

Arakが正しいことに注意してください。 2038年のバグが原因で、少なくとも32ビット整数の使用が問題になります。ただし、(time_tではなく)整数nでのあらゆる種類の算術演算は、コードがそのバグを早期に回避する可能性を高めるだけであることを考慮する必要があります。

PS:元の回答で明確にしなかった場合、コンパイラの警告に対する最善の対応は、ほとんどの場合、警告されている状況に対処することです。たとえば、高精度のデータを低精度の変数に強制すると、情報が失われます。コンパイラは、地雷のバグを作成したばかりで、誰かがずっと後になるまでつまずかない可能性があることを警告しようとしています。

于 2009-09-27T02:44:49.437 に答える
2

時間はtime_t整数ではなく戻ります。より大きい可能性があるため、このタイプを使用することをお勧めしintます。

本当に必要な場合はint、明示的に型キャストします。次に例を示します。

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

VisualC++を使用していると思います。の戻りタイプは、time(0)とは異なり、プラットフォーム64bit int用にプログラミングしている場合でもです。警告を削除するには、変数に割り当てるだけです。32bitg++time(0)64bit

于 2009-09-27T02:44:42.150 に答える
1

おそらく、intの代わりにtime_tのタイプを使用したいと思うでしょう。

http://en.wikipedia.org/wiki/Time_tの例を参照してください。

于 2009-09-27T02:49:24.780 に答える