key9 wrote:
Hi all
passing argument of "lib_init_terminal" from incompatible pointer type
invoke code slice
=================
lib_init_terminal (&sys_init_signals);
prototype
=========
void sys_init_signals (void);
int lib_init_terminal (void *ptr_sys_init_signals(void))
{
(*ptr_sys_init_signals)();
}
where 's the mistake?
Why is it so hard for people to post compilable code? Surrounding your
call with 'int main(void) {' and '}' would have been easier for you that
those stupid tags with equal-sign underlining.
The answer:
void sys_init_signals(void);
#if 0
/* your illegal form, which claims ptr_sys_init_signals returns
a pointer-to-void */
int lib_init_terminal(void *ptr_sys_init_signals(void))
/* a form that works */
int lib_init_terminal(void (*ptr_sys_init_signals) (void))
#endif
/* and a cleaner form that works */
int lib_init_terminal(void ptr_sys_init_signals(void))
{
(*ptr_sys_init_signals) ();
return 0; /* added. You claim lib_init_terminal
returns an int, but you don't return
one. */
}
int main(void)
{
lib_init_terminal(&sys_init_signals);
return 0;
}