OMAPL138学习---typedef int(init_fnc_t)(void)
2014-02-15 13:54
441 查看
在学习ICETEK-OMAP138板的uBoot,遇到
init_fnc_t **init_fnc_ptr
-------------------------------------------------------------------
init_fnc_t *init_sequence[] = {
cpu_init,
board_init,
interrupt_init,
env_init,
init_baudrate,
serial_init,
console_init_f,
display_banner,
dram_init......
-------------------------------------------------------------------------------------------------------
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0) {
hang ();
上面for循环就是在执行一个函数指针数组中的函数,函数指针数组是*init_sequence[];
在此之前定义了一个双重指针:init_fnc_t **init_fnc_ptr
init_fnc_t 是函数类型的一个别名
init_fnc_t **init_fnc_ptr就是定义了一个init_fnc_t这样类型函数的双重指针。
init_sequence数组中的每个函数其实都是参数为void,返回值为int的函数,所以数组名init_sequence就也是参数为void,返回值为int类型函数的双重指针。
在for语句中:init_fnc_ptr = init_sequence。*init_fnc_ptr是判断函数指针是否存在。++init_fnc_ptr是指向数组的下一个元素,即指向下一个函数指针。
for循环中的if语句:if ((*init_fnc_ptr)() != 0)就是用双重函数指针调用数组中的这些函数。*init_fnc_ptr就是提取 init_fnc_ptr指向的内容,自然就是得到数组中的某个元素,即某个函数指针,然后使用函数指针直接调用这个函 数。如果函数返回为非0,则调用hang(),停止执行
对于函数的申明:int initFunction()(void) 申明了一个函数名为initFunction的函数
typedef int(init_fnc_t)(void)
对于个int(void)类型的函数类型进行取别名init_fnc_t。
总结:当遇到需要执行一串子函数,可以先用typedef 进行函数类型的定义,然后申请定义后类型的函数指针数组,把要调用的函数名保存在这个数组中,申请一个init_fnc_t类型函数的双重指针用于for循环调用。
init_fnc_t **init_fnc_ptr
-------------------------------------------------------------------
init_fnc_t *init_sequence[] = {
cpu_init,
board_init,
interrupt_init,
env_init,
init_baudrate,
serial_init,
console_init_f,
display_banner,
dram_init......
-------------------------------------------------------------------------------------------------------
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0) {
hang ();
上面for循环就是在执行一个函数指针数组中的函数,函数指针数组是*init_sequence[];
在此之前定义了一个双重指针:init_fnc_t **init_fnc_ptr
init_fnc_t 是函数类型的一个别名
init_fnc_t **init_fnc_ptr就是定义了一个init_fnc_t这样类型函数的双重指针。
init_sequence数组中的每个函数其实都是参数为void,返回值为int的函数,所以数组名init_sequence就也是参数为void,返回值为int类型函数的双重指针。
在for语句中:init_fnc_ptr = init_sequence。*init_fnc_ptr是判断函数指针是否存在。++init_fnc_ptr是指向数组的下一个元素,即指向下一个函数指针。
for循环中的if语句:if ((*init_fnc_ptr)() != 0)就是用双重函数指针调用数组中的这些函数。*init_fnc_ptr就是提取 init_fnc_ptr指向的内容,自然就是得到数组中的某个元素,即某个函数指针,然后使用函数指针直接调用这个函 数。如果函数返回为非0,则调用hang(),停止执行
对于函数的申明:int initFunction()(void) 申明了一个函数名为initFunction的函数
typedef int(init_fnc_t)(void)
对于个int(void)类型的函数类型进行取别名init_fnc_t。
总结:当遇到需要执行一串子函数,可以先用typedef 进行函数类型的定义,然后申请定义后类型的函数指针数组,把要调用的函数名保存在这个数组中,申请一个init_fnc_t类型函数的双重指针用于for循环调用。
相关文章推荐
- linux内核学习初笔记(3)u-boot执行第二阶段typedef int (init_fnc_t) (void)解释
- typedef int (init_fnc_t) (void)和typedef int (*init_fnc_t) (void)
- typedef int(init_fnc_t) (void)的解释
- typedef int (init_fnc_t) (void)和typedef int (*init_fnc_t) (void)
- uboot中typedef int (init_fnc_t) (void);详解
- 自定义函数名数据类型typedef int (init_fnc_t) (void);
- typedef int (*init_fnc_t)(void);的理解
- “typedef int (init_fnc_t) (void);“的含义
- typedef int (init_fnc_t) (void)和typedef int (*init_fnc_t) (void)
- typedef int(init_fnc_t) (void) 和 typedef int(*init_fnc_t) (void);
- 【转】typedef int (init_fnc_t) (void)和typedef int (*init_fnc_t) (void)
- typedef int (init_fnc_t) (void)和typedef int (*init_fnc_t) (void)
- typedef int (init_fnc_t) (void)和typedef int (*init_fnc_t) (void) 区别
- typedef int(init_fnc_t) (void) 和 typedef int(*init_fnc_t) (void)函数类型和函数指针的区别
- typedef int(init_fnc_t) (void) 和 typedef int(*init_fnc_t) (void);
- typedef int (init_fnc_t) (void)和typedef int (*init_fnc_t) (void)
- 关于typedef int (init_fnc_t) (void);理解
- Linux内核之 “typedef int (init_fnc_t) (void);”
- typedef int(init_fnc_t) (void) 和 typedef int(*init_fnc_t) (void);
- typedef int (init_fnc_t) (void)和typedef int (*init_fnc_t) (void)