我试图了解用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/