>「センス・オブ・プログラミング」読ませていただきました。
>読んで良かったと思いました。
はじめまして。読んでいただきありがとうございます。
>ところで、可変長配列について説明(P153)がちょっと足りないのでは?
このテクニックは、私も「ポインタ完全制覇」では説明していますが、
今回の本で必要だったかというとどうかと思います。
Cに特化した話ですし(だからこそ「Cに特有の話」の項になら書いてよいのでは、
というご意見なのだと思いますが)、それに、このテクニックは、使用できる
状況が限定されますし。
このテクニックで可変長配列を実現すると、realloc()で配列を拡張したとき、
構造体本体のアドレスまで変わってしまう可能性があります。
よって、この構造体を指しているポインタがどこかにあるときは、
このテクニックは使えません。
また、可変長配列にできる要素が最後のひとつだけ、という問題もあります。
このテクニックを使う機会は、「その構造体を、連続した塊としてファイルに
吐いたり、ネットワークでどこかに送りたい」というケースに限定されるように
思います。
>Cではこれが間違いではありません。---①
微妙です。少なくとも合法と言い切ることはできません。
C-FAQには以下の記述があります。
http://www.kouno.jp/home/c_faq/c2.html#6
| この技巧は人気がある。ただしDennis Ritchieは「Cの実装への
| 根拠のない馴れ馴れしさ」と呼んだ。公式な解釈によると上の
| 技巧は Cの 規格に厳密には準拠していないと考えられる。
私も同じように思います。が、ほぼ全ての環境で動くと思うので、
移植性を根拠にこれを使うことをためらう必要はないでしょうけど。
>この2点が「Cに特有の話」である事で、この説明が足りないと思いました。
補足の形で(Webに)載せた方がよいかどうかは、現在思案中です。