C/C++プログラミングの禁じ手

ついったで自動変数に対するメモリ割り当てに関する話題を耳にしたので、そんな話がC MAGAZINEの特集にあったことを思い出しました。それで検索してみたんですが、廃刊の影響かcmagazine.jpが消滅してました。こういうときはwayback machine先生に聞いてみよう。ということでブクマしときました。

文字化けする場合は文字コードEUC-JPにするといいです。

件の自動変数については、ポインタをlong型変数で保持できると決めつけるの備考内。

たとえば自動変数を実装するのは「ひとつの関数のなかで保証され,関数から外に出たら無効になる」という性質を守るだけでOKです。そのため,自動変数をスタック領域に割り付けないで関数のなかでmallocで確保し,関数から出るときにfreeで解放するという実装にしても規格には違反しません。しかし,現実にはスタックが使用できる環境でこういう実装をするのはあまりにも馬鹿げているし,効率も悪いので,多くの処理系で「自動変数をスタック領域に割り付ける」という実装が選択されることになります。ところが,この事情を知らないで実際の処理系の動作から規格を推理しようとすると,自分の周りにある処理系だけを調べて「C言語では自動変数はスタック領域に割り付ける規格である」という嘘の結論に達してしまうわけです。

この禁じ手は相当読み込んだから備考まで覚えてたみたいです。こういう有益な資料が消えてしまうと困るので、あらためてwayback machine先生の偉大さを感じました。