u-boot中typedef应用解析

    技术2022-05-19  20

    typedef在C中真是一个神奇的东西,没有点事例真是很难理解:( 回头看看那超烂的大学C教程,很多地方没写清楚,遇到问题时看不懂代码。 u-boot中有这么一段代码。

    /*这里定义了一个新的数据类型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;}

     

     

     

     


    最新回复(0)