【问题标题】:Need help understanding what this C code does需要帮助了解此 C 代码的作用
【发布时间】:2021-02-06 18:58:29
【问题描述】:

我需要帮助理解以下代码是什么。

1 const char* (*srslte_rf_devname)(void* h);

2 int (*srslte_rf_start_rx_stream)(void* h, bool now);

3 int (*srslte_rf_stop_rx_stream)(void* h);

4 void (*srslte_rf_flush_buffer)(void* h);

我认为第 1 行发生的事情是 const char* 是一个指针,它是一个常量字符数组,它指向一个名为 srslte_rf_devname 的指针函数,我不知道 (void* h) 是什么或什么它正在做。

我认为第 2 行声明了一个名为 srslte_rf_start_rx_stream 且类型为 int 的指针函数。我不知道 (void* h, bool now);是或正在做什么。

我认为第 4 行声明了一个没有返回值“void”的指针函数,不确定该函数与其他行相比是什么“类型”。

请帮助我理解 * 的含义以及 (*"some_stuff") 的含义,或将我指向解释它的资源。

【问题讨论】:

  • 阅读Modern C 并查看this C reference 然后查看n1570 草案C 标准。你有指向函数的指针。
  • 所有四行都声明了指向函数的指针。这些函数具有不同的返回类型和不同的参数。它们共同的参数(void* h)是一个句柄(即指向不透明类型的指针)。您通常从初始化函数中获取句柄。

标签: c


【解决方案1】:

1。 const char* (*srslte_rf_devname)(void *h);

注意,在 C 语法中,const chardeclaration-specifiers 的一部分,*declarator 的一部分。因此,要从语法上理解这一点,我们应该将 * 与声明符的其余部分组合在一起,而不是与说明符组合:const char *(*srslte_rf_devname)(void *h)

那么,这意味着:

  • *(*srslte_rf_devname)(void *h)const char
  • 因此(*srslte_rf_devname)(void *h) 是指向const char 的指针。
  • 因此,(*srslte_rf_devname) 是一个接受 void * 并返回指向 const char 的指针的函数。
  • 因此,srslte_rf_devname 是一个指向函数的指针,该函数采用 void * 并返回指向 const char 的指针。

经过上述,更容易看到剩下的项目:

  • int (*srslte_rf_start_rx_stream)(void *h, bool now); 表示 srslte_rf_start_rx_stream 是一个指向函数的指针,该函数采用 void *bool 并返回 int
  • int (*srslte_rf_stop_rx_stream)(void *h); 表示 srslte_rf_stop_rx_stream 是一个指向函数的指针,该函数采用 void * 并返回 int
  • void (*srslte_rf_flush_buffer)(void *h); 表示 srslte_rf_flush_buffer 是一个接受 void * 并返回 void 的函数(什么都没有)。

【讨论】:

  • 为了一致性:const char *(*srslte_rf_devname)(void* h) -> const char *(*srslte_rf_devname)(void *h)
猜你喜欢
  • 2021-12-23
  • 2013-10-09
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多