Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用;“外部”;声明没有参数的函数_C_Xcode_Macos - Fatal编程技术网

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()

我正在用C开发一个插件,指向常用函数的指针只能在运行时确定。因此,我需要使用“extern”声明函数,并且除了函数不带参数外,一切都正常

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


注意:我在一个带有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
不同?