- ベストアンサー
C キャスト方法を教えてください
C言語の初心者なのですが、 int abc(int(*read)(void*, int, int), int size, char* data); ような関数で第1引数の値をキャストするときどうすればよいですか。 int read = (????)NULL; そもそもint(*read)(void*, int, int)ってどういう意味ですか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
int(*read)(void*, int, int) は、引数に"void*, int, int"を持ち、int を返す関数ポインタです。 read の型は、処理系に依存し、VC++ 6 では、"__cdecl *" が default type です。 (変数も定義しないと、int になるのと同じ) キャストの仕方は、次ぎの例の通り。 int main(...){ void *p; int a, b, retValue; .... /* p, a, b は値が入っているとして */ retValue = abc((int (__cdecl *)(void *, int, int))p, a, b); .... } これでは、移植性が悪いので、read の型は自分で定義します。 typedef int (*READP)(void *, int, int); とすると、先の呼び出しは、 retValue = abc((READP)p, a, b); となります。 (処理系に合わせて呼び出しシーケンスを厳密に定義するため typedef int (WINAPI *READP)(.... とすることもあります。 この辺はくわしくありませんので、どなたかに)