ctime

C++版time.h。というかほとんどの実装ではctimeヘッダファイル内でtime.hをstd名前空間内にincludeしている。ハズなのだが、VC++6.0では何故かstd名前空間ではなくグローバル名前空間にincludeされている。(最新のMicrosoft Platform SDKでもグローバル名前空間にバラ撒かれていたのでMicrosoftは変える気はないんだろう。)

実際に使うときはコンパイラによってスコープ解決演算子をつけたりつけなかったりすればいいが、一つのソースで対応したいときは以下のように_MSC_VERが定義されているかで場合分けすれば楽だ。

#include <ctime>
#include <iostream>

#ifdef _MSC_VER
#define NS_STD
#else
#define NS_STD std
#endif

int main()
{
  NS_STD::time_t pt;
  NS_STD::time(&pt);

  struct NS_STD::tm *lpt = NS_STD::localtime(&pt);

  std::cout << "present time(sec from 1970) : " << pt << std::endl;
  std::cout << "local time : " << lpt->tm_year+1900 <<;
  std::cout << " " << lpt->tm_mon+1 << " " << lpt->tm_mday;
  std::cout << " " << lpt->tm_hour << ":" << lpt->tm_min
  std::cout << ":" << lpt->tm_sec << std::endl;

  return 0;
}

とりあえずこのソースでbcc32(BorlandのFreeコンパイラ)とVC++6.0通ることを確認。

それにしても…、localtime()関数の戻り値がポインタってのは何とかならないんだろうか?思わずdeleteしてしまいそうになる。