C言語なら、オレに聞け! <4>

このエントリーをはてなブックマークに追加
244デフォルトの名無しさん
> char**はよくてvoid**が困る理由が分からんが、

C FAQ 日本語訳を読んでいると、4.9 で void ** はダメっぽいふうに
書いてあるので困りました。いろんな型へのポインタの並びを
管理しようとして、const void * で引数をもらっています。
それならと、void ** 以外で処理することにしたんですが、
他の環境に持っていった時に、異なる型へのポインタでは
サイズが変わるかも、と考えて書き込みました。
けれど考えてみたら、ポインタをキャストできるんだから、
どんな型へのポインタでもサイズは変わらないんですよね?
ということで、

void *p, **storage = calloc (capacity, sizeof (void *));
storage[n] = 何らかの void *;
p = storage[n];

を使ってもいいものかどうかについてお願いします。
ダメなら、char ** などを使ってみようと思います。

> void*へ/からの代入はキャストも不要だろ。

7.7 に書かれているようなコードで覚えたので、
void * もキャストするものと思っていました。
でも、読んですぐなものでまだ癖が抜けません。