VC6→VC8移行時でのtimi_tのキャスト

[戻る]
え〜いち 2008/04/15(火) 11:06:32
現在、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を定義するべきでしょうか?

tetrapod 2008/04/15(火) 11:19:16
その移植で何を期待しているか次第かな
・2038 年以後も動くようについでに修正するのか
・2038 年以後は動かなくていいから完全互換がいいのか
どっちかな?

_USE_32BIT_TIME_T を使わないとしたら
struct mydata_t {
 long hoge;
 time_t piyo;
 long huga;
};
等の非互換性に対して入念な検証が必要だと思うぞ

あー 2008/04/15(火) 11:22:11
settime(time_t)になおすのが正解

古いスレッドには追加発言できません。