extern int ival; extern int *ipval; extern int array[3]; extern int matrix[3][3]; extern int fun(int); // via an argument void arg(int a, int *p, int (*fb)(unsigned char), int (*fi)(int), int (*fl)(long), int (*fv)(void), int (*fip)(int *), int (*fim)(int (*)[3]), int (*fvp)(void *), int (*ffp)(int (*)(int))); void arg(int a, int *p, int (*fb)(unsigned char), int (*fi)(int), int (*fl)(long), int (*fv)(void), int (*fip)(int *), int (*fim)(int (*)[3]), int (*fvp)(void *), int (*ffp)(int (*)(int))) { fv(); fb(a); fi(a); fl(a); fb(123); fi(123); fl(123); fb(123L); fi(123L); fl(123L); fb(ival); fi(ival); fl(ival); fip(p); fip((void*)0); fip(ipval); fip(&ival); fip(array); fim(matrix); fvp(p); fvp((void*)0); fvp(ipval); fvp(&ival); fvp(array); fvp(matrix); fvp(fun); fvp(&fun); ffp(fun); ffp(&fun); } // a global extern int (*fb)(unsigned char); extern int (*fi)(int); extern int (*fl)(long); extern int (*fv)(void); extern int (*fip)(int *); extern int (*fim)(int (*)[3]); extern int (*fvp)(void *); extern int (*ffp)(int (*)(int)); void glb(int a, int *p); void glb(int a, int *p) { fv(); fb(a); fi(a); fl(a); fb(123); fi(123); fl(123); fb(123L); fi(123L); fl(123L); fb(ival); fi(ival); fl(ival); fip(p); fip((void*)0); fip(ipval); fip(&ival); fip(array); fim(matrix); fvp(p); fvp((void*)0); fvp(ipval); fvp(&ival); fvp(array); fvp(matrix); fvp(fun); fvp(&fun); ffp(fun); ffp(&fun); } // via a struct member: // -> force to create a register containing the function pointer struct ops { int (*fb)(unsigned char); int (*fi)(int); int (*fl)(long); int (*fv)(void); int (*fip)(int *); int (*fim)(int (*)[3]); int (*fvp)(void *); int (*ffp)(int (*)(int)); int (*const cfi)(int); // for the fun of it }; void ops(int a, int *p, struct ops *ops); void ops(int a, int *p, struct ops *ops) { ops->fv(); ops->fb(a); ops->fi(a); ops->fl(a); ops->fb(123); ops->fi(123); ops->fl(123); ops->fb(123L); ops->fi(123L); ops->fl(123L); ops->fb(ival); ops->fi(ival); ops->fl(ival); ops->fip(p); ops->fip((void*)0); ops->fip(ipval); ops->fip(&ival); ops->fip(array); ops->fim(matrix); ops->fvp(p); ops->fvp((void*)0); ops->fvp(ipval); ops->fvp(&ival); ops->fvp(array); ops->fvp(matrix); ops->fvp(fun); ops->fvp(&fun); ops->ffp(fun); ops->ffp(&fun); ops->fvp(fi); ops->cfi(42); } /* * check-name: Function pointer code generation * check-command: sparsec -c $file -o tmp.o */