使用“ extern”声明不带参数的函数

时间:2019-06-20 13:43:05

标签: c xcode macos

我正在用C开发一个插件,并且只能在运行时确定指向通用函数的指针。结果,我需要使用“ extern”声明函数,并且当一个函数不带参数时,一切都是正确的 except

我应该如何在C中正确声明和分配外部函数指针?

注意:我在使用Xcode 10.2.1的Mac上,我的C代码嵌入在“ .m”(可可)文件中。

1 个答案:

答案 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