Home > Archives > 2013年11月15日

2013年11月15日

関数ポインタは void* に入れてはいけない

Cの言語仕様に関数ポインタからデータ用のポインタへの変換の定義が書いてないので何が起こっても何も文句を言えないらしい.なんとなく身の回りでは動くことのほうが多いのだけど,本来やってはいけないことであると.POSIX 2008 の仕様としては関数ポインタを void* に代入してもちゃんともとに戻せることが要求されてたようだけど(こことか),今の web 上の仕様を見てもその部分(2.12.3)が見当たらないので POSIX 的にも不定になったのか読む文章を間違えとるのか.

確かによく考えるとハーバードアーキテクチャなマシンとかだったらデータとコードでポインタが全く別物かもしれないのか.うーん……

とどのつまり,データと関数は別物なので混ぜるな危険.

Home > Archives > 2013年11月15日

Search
Feeds

Page Top