【发布时间】:2021-02-05 05:00:39
【问题描述】:
我正在尝试了解一个用 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,它指向一个函数,该函数接收一个常量结构 dwt_cb_data_t
我不知道我的推理是否正确,因为我不明白为什么在 dwt_cb_data_t 的末尾有一个*。这是否意味着函数的输入是结构的指针?在这种情况下,为什么不写typedef void (*dwt_cb_t)(const *dwt_cb_data_t);呢?
【问题讨论】:
-
因为
const *dwt_cb_data_t不是参数的有效声明?为什么你认为这应该等同于const dwt_cb_data_t*? -
typedef 从不定义变量,它们定义类型。你对参数的含义是正确的,但我很困惑为什么你认为
const *dwt_cb_data_t是合法的语法。指向T的指针总是写成T*而不是*T。 -
@UnholySheep @john 我错过了变量类型是
const dwt_cb_data_t而不仅仅是const的事实。现在把*放在最后是有意义的
标签: c++ c pointers typedef function-declaration