c++ - 了解如何使用带指针作为参数的typedef void函数

标签 c++ c pointers typedef function-declaration

我试图了解用C编写的固件,该固件驱动芯片进行超宽带连接。
固件大量使用了typedef和指针。我已经了解了固件背后的大多数想法,但是有一个我不明白的typedef void函数。
基本上,固件会创建一个结构来保存设备数据

typedef struct
{
   //some data
   dwt_cb_t    cbTxDone; // Callback for TX confirmation event
   //some other data
} dwt_local_data_t ;
我知道该结构的名称为 dwt_local_data_t ,其中包含一些变量,包括这种奇怪的 dwt_cb_t 类型。
在.h文件中, dwt_cb_t 命名为
// Call-back type for all events    
typedef void (*dwt_cb_t)(const dwt_cb_data_t *);
其中 dwt_cb_data_t 是另一种形式的结构
typedef struct
{
    uint32 status;      //initial value of register as ISR is entered
    uint16 datalength;  //length of frame
    uint8  fctrl[2];    //frame control bytes
    uint8  rx_flags;    //RX frame flags, see above
} dwt_cb_data_t;
现在,我试图了解typedef void (*dwt_cb_t)(const dwt_cb_data_t *);的含义
据我了解,typedef void是一种指向函数的指针类型。它定义了一个变量 dwt_cb_t ,该变量指向一个函数,该函数接收一个常量struct dwt_cb_data_t 作为输入
我不知道我的推理是否正确,因为我不明白为什么 dwt_cb_data_t 末尾有一个*。这是否意味着函数的输入是结构的指针?在这种情况下,为什么不写typedef void (*dwt_cb_t)(const *dwt_cb_data_t);呢?

最佳答案

停止思考typedef void。您正在以这种方式截断定义。
定义的符号是dwt_cb_t,是void (*)(const dwt_cb_data_t *)类型的别名,它是:带有const dwt_cb_data_t *参数并返回void的函数的指针。
在C++中,您将编写:

using dwt_cb_t = void (*)(const dwt_cb_data_t *);
这很清楚。

关于c++ - 了解如何使用带指针作为参数的typedef void函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64477810/

相关文章:

C 全局共享变量与外部变量

c - "@far int* @near IntegerPointer;"的含义

c++ - 令人不安的评估顺序

c++ - 即使输入正确的内容,程序始终会引发异常

c++ - 获取唯一编号并知道它们何时被释放

c++ - 可变结构规范

c - 使用 union 存储的值显示不正确

c++ - Unresolved inclusion 在 Eclipse Luna 中的一些 c/c++ 文件中

c - 这段代码在做我想做的事吗?

c++ - 在二进制搜索树功能中使用指向指针的指针时出错