【问题标题】:Reading function definitions in C在 C 中读取函数定义
【发布时间】:2011-02-11 12:55:00
【问题描述】:

我是一名 Java 开发人员,出于某种原因,我目前正在学习 C。问题是我在阅读函数定义时遇到了一些麻烦。例如,您能否给我一个提示:

void (*signal(int sig, void(*func)(int)))(int)

谢谢大家!

【问题讨论】:

    标签: c function definition


    【解决方案1】:

    你应该学习right-to-left rule。此页面包含很好的示例。

    signal 是一个作为参数的函数:

    • 一个整数
    • 一个指向函数的指针,采用 int 并且不返回任何内容

    并返回指向采用int 的函数的指针,但什么也不返回。

    【讨论】:

    • 在网络上查找“cdecl”。 BTW 信号是比较复杂的例子之一。 :-)
    • 非常感谢!实际上不能认为一个函数可以以这种方式返回一个函数。谢谢!
    • @Albus Dumbledore:实际上,指向函数的指针使得在 C 中可以替代继承。在 C++ 中,您最好使用基本纯虚函数,并实例化实现您的函数的派生类.我以为邓布利多什么都知道。
    • 谢谢伯努瓦!我知道 C++ 中的多态性是通过指向函数的指针来实现的。 :-) 而且,是的,真正的邓布利多确实知道很多。
    • 谢谢伯努瓦。阅读参考文章后,我也可以阅读原型!我现在很高兴:-)
    【解决方案2】:

    'cdecl' 的一个例子。我认为它可用于 Linux 或源代码可以下载和构建。

    cdecl> explain char *(*fptab[])()
    declare fptab as array of pointer to function returning pointer to char
    cdecl> 
    

    【讨论】:

    • cdecl 很有用...也许您可以在信号本身上对其进行测试? :-)
    • 谢谢大卫。 cdecl 确实可以解释一些东西!!!做梦也想不到这样的工具。但是,它无法解释可能的定义,即它给了我一个语法错误。
    • 天哪,尽管这个 cdecl 可能是维基百科所说的那样。那么 C 在某些方面确实接近于汇编?
    • @Albus。取决于你的观点。 ;-) 没有。'C Declare' AFAIK 的 'cdecl' 实用程序与一些 X86 调用约定(也称为“cdecl”)相比,它在维基百科上。顺便说一句,我认为范林登斯解读声明的方法比“从右到左”更好。
    • 这里是 Van Linden 的信号版本: signal 是一个函数(带有一些时髦的参数),它返回一个指向函数的指针(接受一个 int 参数并返回 void)。时髦的论点之一就是它本身: void (*func)(int) ;指向采用 int 参数并返回 void 的函数的指针。” 'Deep C Secrets',Peter Van Linden
    【解决方案3】:

    func 是一个指向函数的指针,它接受一个 int 并返回 void。

    signal 是一个函数,它接受一个 int 和一个类似 func 的指针,并返回一个类似 func 的指针。

    即:您指定哪个信号处理程序 (func) 与信号 (sig) 关联,并且该函数返回一个信号处理程序(前一个)可以存放在某个地方。

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 2016-12-18
      • 1970-01-01
      • 2015-07-19
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      相关资源
      最近更新 更多