最近在看uboot啓動流程源碼中看到了這一個用法,特此記錄學習。
截取u-boot部分代碼出來如下:
typedef int (*init_fnc_t)(void);
static init_fnc_t init_sequence_f[] = {
setup_ram_buf,
setup_mon_len,
initf_console_record
}
typedef int (*init_fnc_t)(void)應該如何進行理解?
我們都知道一般typedef是用於取別名的。這裏可以理解爲 爲一種返回值爲int,參數爲void的函數指針取了一個類型名爲init_fnc_t,所以之後我們就可以直接用init_fnc_t去定義這種函數指針類型了。
從static init_fnc_t init_sequence_f[ ] 可以知道,這就是一個用於裝函數指針的數組(裏面的函數都是以int爲返回值,void爲參數)。
去看了一下在uboot源碼中這幾個函數的定義setup_ram_buf, fdtdec_setup, initf_console_record 如下,全部都是int爲返回值,void爲參數的函數。
static int setup_ram_buf(void)
{
....
}
static int setup_mon_len(void)
{
....
}
static int initf_console_record(void)
{
....
}