我正在用C开发一个插件,并且只能在运行时确定指向通用函数的指针。结果,我需要使用“ extern”声明函数,并且当一个函数不带参数时,一切都是正确的 except !
我应该如何在C中正确声明和分配外部函数指针?
注意:我在使用Xcode 10.2.1的Mac上,我的C代码嵌入在“ .m”(可可)文件中。
答案 0 :(得分:2)
这里的问题很可能是函数指针int (*f)()
不是指向不带参数的函数的函数指针。它是带有 unspecified 参数的函数的函数指针。而是使用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
。