这个C语法叫做什么?

时间:2016-12-04 23:02:19

标签: c syntax

这到底是什么意思?这是如何允许和合法的? 我发誓,每当我想到我掌握了这种语言的运作方式时,就会出现一些真实可爱的语法。

这是来自Semtech的其中一个无线电的示例项目。

radio.h

   void    ( *SetRxConfig )( RadioModems_t modem, uint32_t bandwidth,
                              uint32_t datarate, uint8_t coderate,
                              uint32_t bandwidthAfc, uint16_t preambleLen,
                              uint16_t symbTimeout, bool fixLen,
                              uint8_t payloadLen,
                              bool crcOn, bool FreqHopOn, uint8_t HopPeriod,
                              bool iqInverted, bool rxContinuous );

如果在天堂有正义,怎么写这样的东西呢?这段代码做了什么以及它叫什么,所以我可以查看更多关于它的内容?

1 个答案:

答案 0 :(得分:3)

  

这声明了一个函数:

int foo(int, float, double);
  

这定义(或声明 - 取决于上下文)一个函数指针,可以赋予函数foo的地址:

int (*function_pointer)(int, float, double);

这就是你在这里看到的。

an answer to a similar question建议的user2357112中可以找到关于如何使用,传递参数和返回函数指针的其他示例的更详细说明。

可能的用途包括:

  • 库定义了它的功能挂钩,您可以在其中调用代码。通过定义一个全局变量(如void * (*mymegalib_malloc)(size_t size),您可以在其中替换自己的分配器),或者为signal中的函数指针提供setter函数,
  • 将一个函数传递给另一个函数,比如在qsort中传递一个数组,元素的数量和一个函数,它比较了该数组的两个索引 - 让你有机会让{ {1}}对您想要的任何数据结构进行操作,
  • 创建一些跳转表,如下所示:

    qsort