e101.c


void *で関数アドレスを指すのは作法に反します


void VoidFunc() { 返却値無し関数 { return ; } int IntFunc() { 返却値Int関数 { return 式 ; } main() { void *vp ; VOIDポインタ void (*vfp)(); 返却値無し関数ポインタ int (*ifp)(); 返却値Int関数ポインタ /*作法に反する例*/ vp = IntFunc ; vp = VoidFunc ; vfp = IntFunc ; vfp = (void *)ROM絶対アドレス ; ifp = VoidFunc ; ifp = (void *)ROM絶対アドレス ; /*修正例*/ vfp = VoidFunc ; vfp = (void (*)())ROM絶対アドレス ; ifp = IntFunc ; ifp = (int (*)())ROM絶対アドレス ; }
解説 void は通常、何でも指せるポインタなのですが 厳密には、関数のアドレスだけはさせません。 詳細な説明は、 C-FAQ 11.3J 4.13J(WEB無し、本有り) C-FAQ 11.3E 4.13E を参照して下さい。