size_t

ちょっと前のテキスト、いや最近でも基本は変わらないのかもしれないけれど、最初に習うテキストで、普通にint型で指定するような型の代わりに、今はsize_tを指定しないといけないことがある。

昔の教科書なら

int len = strlen(“hello”);

みたいなのか当たり前だったのに、いまは

size_t len = _tcslen(_T(“hello”));

のようなことになる。_tcslen, _TはTCHARルーチン、つまり、ASCII(あるいはシフトJIS)で文字列を処理していた時代とユニコードで処理するときの移行のために、環境によって作り分けられられるようにしたものだ。

size_tも同様で、符号なし整数なのだけれど、64bitで作る場合と32bitで作る場合に違う結果を返せるようになっている。昔intそのものにも似たようなことがあって、ある場合にはshortを、ある場合にはlongを表していた。

実際に

_stprintf(_T(“%d”), sizeof(size_t));

というようなコードを実行してみると、32bitでは4と表示されるが、64bitでは8と表示される。

これと同じようなものにtime_t, ptrdiff_tがあるそうです。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください