Проблема здесь, скорее всего, в том, что указатель на функцию int (*f)()
НЕ является указателем на функцию, не имеющую аргументов. Это указатель на функцию с неопределенными аргументами. Вместо этого используйте int (*f)(void)
.
Вот пример:
$ cat main.c
int foo() { return 0; }
int bar(int a) { return a; }
int main(void)
{
int (*f)();
f=foo;
f=bar;
int(*g)(void);
g=foo;
g=bar;
}
Теперь мы компилируем
$ gcc main.c
main.c: In function ‘main’:
main.c:11:3: warning: assignment to ‘int (*)(void)’ from incompatible pointer type ‘int (*)(int)’ [-Wincompatible-pointer-types]
g=bar;
^
Как видите, я не получаю предупреждение за указатель f
. Только для g
.