typedef int (init_fnc_t) (void);
init_fnc_t *init_sequence = ;
void start_armboot (void)
}理解:1) init_fnc_t宣告為函式型別,這個函式型別的引數為空,函式返回值為int整型。
2)init_fnc_t *init_sequence 因為init_fnc_t 已經宣告為函式的型別,所以init_fnc_t *init_sequence 的意思是: 定義了乙個函式指標陣列,init_sequence為函式指標陣列名,其成員變數是指向函式的指標變數(指向函式的型別是:引數為空,函式返回值為int整型)
3):for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr)
}為呼叫函式指標陣列中成員變數所指向的函式,如果呼叫成功的話,被呼叫的函式返回0,呼叫不成功,程式被掛起。
附:c/c++的知識補充
2011-03-18 21:35:53
閱讀14
字型大小:大
中小訂閱
1、typedef int (init_fnc_t) (void);表示定義init_fnc_t為函式型別,該函式返回int型,無引數。
而「init_fnc_t *init_sequence=」表示用init_fnc_t(函式型別)去定義乙個一維指標陣列,陣列中的元素都是指標變數,而且都是指向函式的指標,這些函式返回值都是int型,無引數的。更明朗的說就是陣列中的每個元素是用來存放函式入口首位址的。
2、int (*init_fnc_t) (void);表示定義乙個函式指標(返回值為int型,無引數的函式指標,存放的是函式的首位址),typedef int (*init_fnc_t) (void);表示定義乙個函式指標型別,即可以直接用init_fnc_t這個符號去定義函式指標,「init_fnc_t init_sequence=」表示用init_fnc_t(函式指標型別)去定義乙個陣列,陣列裡面的元素都是乙個函式指標,cpu_init, board_init 都是函式指標,存放的都是函式的首位址。
綜上的分析,我個人覺得這兩個定義的意思是一樣的只是寫法不一樣而已,1中的陣列元素是指向函式的指標變數,2中的陣列的元素是函式指標。因此得到的結果是一樣的。
說實話,typedef的用法真的挺**,一部小心會讓你掉入陷阱!!!不過能夠用好typedef並深刻理解他的內涵,我覺得個人的c語言能力會是乙個大提高!
u boot原始碼分析 啟動第二階段002
我們先來看初始化函式表 init sequence lib arm board.c typedef int init fnc t void init fnc t init sequence 這些初始化函式會依次執行,我們乙個個的來看 arm920t cpu.c int cpu init void 對...
u boot原始碼分析 啟動第二階段002
我們先來看初始化函式表 init sequence lib arm board.c typedef int init fnc t void init fnc t init sequence 這些初始化函式會依次執行,我們乙個個的來看 arm920t cpu.c int cpu init void 對...
uboot原始碼分析2 啟動第二階段
注意 board init中除了網絡卡的初始化之外,剩下的2行用來初始化ddr。這裡的初始化ddr和彙編階段lowlevel init中初始化ddr是不同的。當時是硬體的初始化,目的是讓ddr可以開始工作。現在是軟體結構中一些ddr相關的屬性配置 位址設定的初始化,是純軟體層面的。注 這個函式只是對...