Part 11.メモリレイアウト(4)


ushort Length;
UCS2 StringBody[31];

ただし、結局のところ、上のようにたかが2行のコードであっても必ず相手に伝わるとは限らない。
このたった2行のコードですら、暗黙的に読み手のプログラマの経験や知識に頼っているからだ。


・上の書き方は、'\0'終端文字列しか扱ったことのないプログラマには意味が伝わらないかも知れない。
・なんとかImplやなんとかBodyという命名を見たことがないプログラマには意味が捉えにくいかも知れない。
・そもそもUCS-2というcode setを知らないプログラマにはこれが文字列であること自体が伝わらないかも知れない。
UCS-2を正しく理解していないプログラマは、「UCS2はsurrogate pairとかcombining characterがなくて全部16ビットなのでしたっけ?」などと言い出だすかも知れない。UCS-2には、surrogate pairとかcombining characterも無く、必ず1文字が16bit幅で上記のStringBodyは正真正銘31文字分のバッファなのだが、この部分の理解が正しくないと、それが伝わらない。


あるいは、これを書くプログラマ自身がUCS-2を知らなくて、wchar_tと書いてしまうかも知れない。wchar_tと書かれた場合、sizeof(wchar_t)が4(つまりUTF-32)の実装もあるのでこのプログラムの読み手が、「wchar_tと書かれているものはUCS-2の意味なのだ」と理解するためには、wchar_tの定義が16bit整数型でのtypedefになっているだとか、あるいはそれが実際に16bit型として用いられているところを見届けなければならない。


そもそもStringBody[31]の31というmagic numberが何を意図しているのか。何の仕様上、31文字で十分だと言えるのか?それはこの部分からだけでは決して伝わってこない。


(つづく)