通知
すべてクリア
Topic starter
2008年4月15日 11:06 AM
現在、VC++6.0から8.0に移行しております
このとき、time_tについて
VC++6.0
void settime(long)という関数に現在の時間をセットするプログラムを
{
time_t nt;
time( &nt );
settime(nt);
}
と記載しています
これをVC++8.0に移行する際に
{
time_t nt;
time( &nt );
settime((long)nt);
}
と修正しました
この修正でも2038年まで日付であれば正しく動作すると思ってよいでしょうか?
正しくは、void settime(long)をvoid settime(__int64)に直すのがいいと思うのです
が、この修正だと、修正が広範囲にわたるため、キャストでいけないかと考えました
ちなみに、VC++6.0の32bitでも、VC++8.0での64bitでも、同じ値で現在の時刻が取得され
て、期待通りに動くことまでは確認しました
あるいは_USE_32BIT_TIME_Tを定義するべきでしょうか?
2008年4月15日 11:19 AM
その移植で何を期待しているか次第かな
・2038 年以後も動くようについでに修正するのか
・2038 年以後は動かなくていいから完全互換がいいのか
どっちかな?
_USE_32BIT_TIME_T を使わないとしたら
struct mydata_t {
long hoge;
time_t piyo;
long huga;
};
等の非互換性に対して入念な検証が必要だと思うぞ
2008年4月15日 11:22 AM
settime(time_t)になおすのが正解