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
を参照して下さい。