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[] = {

最新文章

  1. Mysql跨表更新 多表update sql语句总结
  2. JavaScript 设计模式 - 工具函数
  3. 学习Linux第七天
  4. Jquery 判断浏览器类型
  5. SharePoint 2013 Pop-Up Dialogs
  6. HDU4417 - Super Mario(主席树)
  7. SQL 把数据从一张表更新到另一张表
  8. 信息熵(Entropy)究竟是用来衡量什么的?
  9. 介绍 - OC中的代理模式
  10. JDBC相关知识
  11. dedecms判断当前页面是否为首页 织梦设置首页高亮
  12. Windows下 OpenSSL DES加密配置
  13. DockerHub使用简介
  14. Java 线程类的一些常用方法
  15. qq sid qq sid 是什么 qq sid 怎么用
  16. 使用Nexus搭建Maven服务器详细配置【转】
  17. 解决Windows Git Bash中文乱码问题
  18. Navicat Premium解决连接mssql报错的问题
  19. nmap保存结果
  20. unbntu修改mac地址

热门文章

  1. ControlTemplate in WPF —— RadioButton
  2. PHP结合Ueditor并修改图片上传路径 微信小程序 拼接域名显示图片
  3. MM相关号码范围IMG设定
  4. oracle 在sql中显示blob的字符串
  5. 在线运行.NET代码
  6. 【ABAP系列】SAP ABAP7.40新语法简介第一篇
  7. CF486B OR in Matrix(构造+思维)
  8. 小记------mongodb数据库如何进行模糊查询
  9. 【挣扎失败】2019CSP-S 游记
  10. py3.7安装Scrapy及安装时的 Running setup.py install for Twisted ... error 和安装后的 Unhandled error in Deferred: