C 使用;“外部”;声明没有参数的函数
我正在用C开发一个插件,指向常用函数的指针只能在运行时确定。因此,我需要使用“extern”声明函数,并且除了函数不带参数外,一切都正常 如何在C中正确声明和分配外部函数指针C 使用;“外部”;声明没有参数的函数,c,xcode,macos,C,Xcode,Macos,我正在用C开发一个插件,指向常用函数的指针只能在运行时确定。因此,我需要使用“extern”声明函数,并且除了函数不带参数外,一切都正常 如何在C中正确声明和分配外部函数指针 注意:我在一个带有Xcode 10.2.1的Mac上,我的C代码嵌入在一个“.m”(Cocoa)文件中。这里的问题很可能是函数指针int(*f)(不是指向不带参数的函数的函数指针。它是指向具有未指定参数的函数的函数指针。相反,请使用int(*f)(void) 以下是一个例子: $ cat main.c int foo()
注意:我在一个带有Xcode 10.2.1的Mac上,我的C代码嵌入在一个“.m”(Cocoa)文件中。这里的问题很可能是函数指针
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
这里的问题很可能是函数指针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
从发布当前声明的方式开始。除了函数不带参数外,其他都是正确的,并且有什么不正确的地方?您没有提供代码,也没有提供错误。你得到的任何帮助都将是猜测的结果。如果你在没有extern
的情况下定义和声明一个文件中没有参数的函数,你怎么做?为什么您希望它与extern
有所不同?请先公布您当前的声明方式。除了函数不带参数外,其他都是正确的,还有什么不正确的地方?您没有提供代码,也没有提供错误。你得到的任何帮助都将是猜测的结果。如果你在没有extern
的情况下定义和声明一个文件中没有参数的函数,你怎么做?为什么您希望它与extern
不同?