typedef int(init_fnc_t) (void);

这个就是一个取别名的过程。

我们通常情况下会如下使用 typedef :
typedef int MyInt;
MyInt a;

这个时候我们的MyInt 就和int是一样的意思。

而对于函数的申明我们通常会这样申明:
int InitFunction(void);
此时表示申明了一个函数名为InitFunction的函数, 函数没有任何的形参,返回值类型为int型。

而对于 typedef int(init_fnc_t) (void);
就是对一个 int (void)类型的函数类型进行取别名init_fnc_t。 我们可以利用这个别名进行创建这个类型的函数对象。

init_fnc_t *MyFunction;
这里就是一个函数的指针。如果某个函数的类型和这个函数一样的,那么可以将这个函数的指针指向该函数。然后你就可以直接调用MyFunction();

以下是例子

#include <stdio.h>

int GetData(void)
{
    return 101;
}

int main()
{
    typedef int (init_fnc_t)(void);
    typedef int (*init_fnc_t_p)(void);     
    init_fnc_t *MyFunction; init_fnc_t_p MyFunctionP;     
    MyFunction = GetData; MyFunctionP = GetData;     
    printf("(init_fnc_t)(void) = %d \n",MyFunction());
    printf("(*init_fnc_t_p)(void) = %d \n",MyFunctionP());
    return 0;
}

C程序中除了简单类型名(int、char等),还有许多看起来复杂的类型名(结构体类型、共用体类型、指针类型等),C允许程序设计者用一个简单的名字代替复杂的名字。
1)命名一个新的类型名代表结构体类型

typedef struct {
    int month;
    int day;
}Date;

Date today;  //定义变量

声明了新的类型名Date,然后可以用新的类型名Date去定义变量。
2)命名一个新的类型名代表数组类型

typedef int Num[100];    //声明Num为整形数组类型名
Num a;            //定义a为整形数组名,它有100个元素

3)命名一个新的类型名代表指针类型

typedef char* String;    //声明String为字符指针类型
String p;        //定义p为字符指针变量

4)命名一个新的类型名代表指向函数的指针类型

typedef int (* Pointer)();    //声明Pointer为指向函数的指针类型,函数返回整型值
Pointer p;            //p为Pointer类型的指针变量

归纳起来,声明一个新的类型名的方法是:
①先按定义变量的方法写出定义体(如int i;)。
②将变量名换成新类型名(例如:将i换成Count)。
③在最前面加typedef(例如:typedef int Count)。
④然后可以用新类型名去定义变量。

① 先按定义数组变量形式书写: int n[100] ;

② 将变量名n换成自己指定的类型名:

int  NUM [100];

③ 在前面加上 typedef ,得到

typedef int NUM [100];

④ 用来定义变量: NUM  n;

简单地说,就是 按定义变量的方式,把变量名换上新类型名,并且在最前面加“typedef”,就声明了新类型名代表原来的类型。
习惯上,常把用typedef声明的类型名的第一个字母用大写表示,以便于系统提供的标准类型标识符相区别。

include/initcall.h

typedef int (*init_fnc_t)(void);

common/board_f.c

static const init_fnc_t init_sequence_f[] = {

common/board_r.c

static init_fnc_t init_sequence_r[] = {

typedef int(init_fnc_t) (void)的理解的更多相关文章

  1. typedef int (init_fnc_t) (void)和typedef int (*init_fnc_t) (void)

    1.typedef  int (init_fnc_t) (void);表示定义init_fnc_t为函数类型,该函数返回int型,无参数.而“init_fnc_t  *init_sequence[]= ...

  2. “typedef int (init_fnc_t) (void);“的含义

    在读uboot的lib_arm/board.c中的start_armboot ()函数遇到了"init_fnc_t **init_fnc_ptr;”一句话,后来查看init_fnt_t数据类 ...

  3. int (*(*fp)(void *))[10]; 指向函数的指针类型

    <pre lang="c" escaped="true">int (*(*fp)(void *))[10]; //这个类型用typedef分解出来 ...

  4. typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针

    首先介绍大家比较熟悉的typedef int i;//定义一个整型变量i typedef myInt int: myInt j;//定义一个整型变量j 上面介绍得是我们常用的比较简单的typedef的 ...

  5. signal函数理解或者void (*signal(int signum,void(*handler)(int)))(int)理解

    把void (*signal(int signum,void(*handler)(int)))(int)分成两部分: typedef void (*sighandler_t)(int); sighan ...

  6. 如何理解这段代码:void (*signal (int sinno,void(*func)(int)))(int)

    void (*signal (int sinno,void(*func)(int)))(int) 先来看void(*func)(int)   这里的意思是声明一个函数指针func,它的参数类型为int ...

  7. void (*signal(int sig, void (*func) (int))) (int)理解

    http://blog.csdn.net/sever2012/article/details/8281271 1.signal( int sig, void (*func)(int))signal是一 ...

  8. C语言复杂声明-void (*signal(int sig, void (*handler)(int)))(int);

    问题提出 请分析此声明:void (*signal(int sig, void (*handler)(int)))(int); 求解过程 在对上面的例子作分析之前,我们需要了解C语言的声明优先级,&l ...

  9. signal函数的原型声明void (*signal(int signo, void (*fun(int))))(int)分析

    转:http://blog.sina.com.cn/s/blog_4850a7880100hnam.html void (*signal(int signo, void (*fun(int))))(i ...

随机推荐

  1. jquery用formada发送文件到服务器

    var formdata = new FormData(); formdata.append("file", $("#Input")[0].files[0]); ...

  2. 百度地图POI爬取

    我们研究生的课程内容,做下笔记记录一下. 使用的python环境是python3.7 用的图大部分都是老师ppt里的图,懒得自己截了-- 申请百度开发者密匙 (1)注册百度用户,注册过的话,直接登录就 ...

  3. linux查看内存使用情况top

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看, ...

  4. 不错的点击li标签删除的例子

    <script type="text/javascript">function delElement(obj){ obj.parentNode.removeChild( ...

  5. dos2unix Linux解决编写脚本出现“%0D

    ## Linux解决编写脚本出现“%0D”# 安装# yum install -y dos2unix# 然后进行转化一下脚本,将其中的install_mysql.sh换成你的脚本# dos2unix ...

  6. mybatis多对多级联查询

    1.实体 package com.govmade.govdata.modules.sys.pojo; import java.util.List; import javax.persistence.T ...

  7. BUUOJ reverse 刮开有奖

    刮开有奖 这是一个赌博程序,快去赚钱吧!!!!!!!!!!!!!!!!!!!!!!!!!!!(在编辑框中的输入值,即为flag,提交即可) 注意:得到的 flag 请包上 flag{} 提交 拖到id ...

  8. vultr vps 开启BBR加速 (CentOS 7)

    上个月买的vultr的vps 感觉看视频还是比较慢的 于是上网找教程开启BBR加速 在这里记录一下 以后可能会用到 BBR 是 Google 提出的一种新型拥塞控制算法,可以使 Linux 服务器显著 ...

  9. zabbix监控java

    参考: 官网: https://www.zabbix.com/documentation/4.0/manual/config/items/itemtypes/jmx_monitoring

  10. c++实现直接插入排序

    基本概念 直接插入排序是一种最简单的排序方法,排序过程为:先将第一个元素看作是只有一个元素的有序子表,然后从第二个元素开始,将待排序元素依次插入到前面有序的子表中,直到全部排序完毕.在整个过程中,前面 ...