【问题标题】:Using "extern" to declare functions with no parameters使用“extern”声明不带参数的函数
【发布时间】:2019-11-03 08:30:32
【问题描述】:

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

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

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

【问题讨论】:

  • 首先发布您当前的声明方式。
  • 一切都是对的,除非函数不带参数而具体有什么不对呢?你没有提供代码,你没有提供什么是错的。您获得的任何帮助都将是猜测的结果。
  • 如果你在没有extern的文件中定义和声明一个没有参数的函数,你怎么做?为什么你期望它与extern 不同?

标签: c xcode macos


【解决方案1】:

这里的问题很可能是函数指针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

【讨论】:

    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多