u-boot中typedef应用解析___init_fnc_t *init_sequence[]

来源:互联网 发布:黑客特效js 编辑:程序博客网 时间:2024/06/05 19:02

/*这里定义了一个新的数据类型init_fnc_t

 *这个数据类型是参数为空,返回值为int的函数。
 */

typedef int (init_fnc_t) (void);
/*init_sequence是一个指针数组,指向的是init_fnc_t类型的函数*/
init_fnc_t *init_sequence[] = {
    cpu_init, /* basic cpu dependent setup */
    board_init, /* basic board dependent setup */
    interrupt_init, /* set up exceptions */
    env_init, /* initialize environment */
    init_baudrate, /* initialze baudrate settings */
    serial_init, /* serial communications setup */
    console_init_f, /* stage 1 init of console */
    display_banner, /* say that we are here */
    dram_init, /* configure available RAM banks */
    display_dram_config,
#if defined(CONFIG_VCMA9) || defined (CONFIG_CMC_PU2)
    checkboard,
#endif
    NULL,
};

/*init_fnc_ptr为指向函数指针的指针*/
init_fnc_t **init_fnc_ptr;
/*init_fnc_ptr初始化指向init_sequence指针数组,下面的循环遇到NULL结束*/
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
    if ((*init_fnc_ptr)() != 0) {/*(*init_fnc_ptr)()为C中调用指针指向的函数*/
        hang ();
    }
}


自己写了2个test程序
一个typedef int (test_fnc_t) (void);
一个typedef int (*test_fnc_t) (void);

#include<stdio.h>

int test0 (void);
int test1 (void);

typedef int (*test_fnc_t) (void);

test_fnc_t test_sequence[] = {
    test0,        
    test1,        
    NULL,
};


//int _tmain(int argc, _TCHAR* argv[])

int main()
{
    test_fnc_t *test_fnc_ptr;

    for (test_fnc_ptr = test_sequence; *test_fnc_ptr; ++test_fnc_ptr) {
        if ((*test_fnc_ptr)() != 0) {
            printf("error here!");
        }
    }

    return 0;
}

int test0 (void)
{
    printf("test0\n");
    return 0;
}

int test1 (void)
{
    printf("test1\n");
    return 0;
}

#include<stdio.h>

int test0 (void);
int test1 (void);


typedef int (test_fnc_t) (void);

test_fnc_t *test_sequence[] = {
    test0,        
    test1,        
    NULL,
};


//int _tmain(int argc, _TCHAR* argv[])

int main()
{
    test_fnc_t **test_fnc_ptr;

    for (test_fnc_ptr = test_sequence; *test_fnc_ptr; ++test_fnc_ptr) {
        if ((*test_fnc_ptr)() != 0) {
            printf("error here!");
        }
    }

    return 0;
}

int test0 (void)
{
    printf("test0\n");
    return 0;
}

int test1 (void)
{
    printf("test1\n");
    return 0;
}