您的位置:首页 > 编程语言 > C语言/C++

uboot中typedef int (init_fnc_t) (void);详解

2014-11-23 19:08 465 查看
原文地址:u-boot中typedef应用解析___init_fnc_t*init_sequence[]作者:谢争

 

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("test0n");
     return 0;
}

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

#include<stdio.h>

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

typedef int
(test_fnc_t) (void);

test_fnc_t *test_sequence[]=[/code]
{
    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("test0n");
     return 0;
}

int test1 (void)
{
     printf("test1n");
     return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息