typedef int(init_fnc_t) (void)的理解
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)的理解的更多相关文章
- 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[]= ...
 - “typedef int (init_fnc_t) (void);“的含义
		
在读uboot的lib_arm/board.c中的start_armboot ()函数遇到了"init_fnc_t **init_fnc_ptr;”一句话,后来查看init_fnt_t数据类 ...
 - int (*(*fp)(void *))[10]; 指向函数的指针类型
		
<pre lang="c" escaped="true">int (*(*fp)(void *))[10]; //这个类型用typedef分解出来 ...
 - typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针
		
首先介绍大家比较熟悉的typedef int i;//定义一个整型变量i typedef myInt int: myInt j;//定义一个整型变量j 上面介绍得是我们常用的比较简单的typedef的 ...
 - signal函数理解或者void (*signal(int signum,void(*handler)(int)))(int)理解
		
把void (*signal(int signum,void(*handler)(int)))(int)分成两部分: typedef void (*sighandler_t)(int); sighan ...
 - 如何理解这段代码:void (*signal (int sinno,void(*func)(int)))(int)
		
void (*signal (int sinno,void(*func)(int)))(int) 先来看void(*func)(int) 这里的意思是声明一个函数指针func,它的参数类型为int ...
 - void (*signal(int sig, void (*func) (int))) (int)理解
		
http://blog.csdn.net/sever2012/article/details/8281271 1.signal( int sig, void (*func)(int))signal是一 ...
 - C语言复杂声明-void (*signal(int sig, void (*handler)(int)))(int);
		
问题提出 请分析此声明:void (*signal(int sig, void (*handler)(int)))(int); 求解过程 在对上面的例子作分析之前,我们需要了解C语言的声明优先级,&l ...
 - 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 ...
 
随机推荐
- jquery用formada发送文件到服务器
			
var formdata = new FormData(); formdata.append("file", $("#Input")[0].files[0]); ...
 - 百度地图POI爬取
			
我们研究生的课程内容,做下笔记记录一下. 使用的python环境是python3.7 用的图大部分都是老师ppt里的图,懒得自己截了-- 申请百度开发者密匙 (1)注册百度用户,注册过的话,直接登录就 ...
 - linux查看内存使用情况top
			
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看, ...
 - 不错的点击li标签删除的例子
			
<script type="text/javascript">function delElement(obj){ obj.parentNode.removeChild( ...
 - dos2unix Linux解决编写脚本出现“%0D
			
## Linux解决编写脚本出现“%0D”# 安装# yum install -y dos2unix# 然后进行转化一下脚本,将其中的install_mysql.sh换成你的脚本# dos2unix ...
 - mybatis多对多级联查询
			
1.实体 package com.govmade.govdata.modules.sys.pojo; import java.util.List; import javax.persistence.T ...
 - BUUOJ reverse 刮开有奖
			
刮开有奖 这是一个赌博程序,快去赚钱吧!!!!!!!!!!!!!!!!!!!!!!!!!!!(在编辑框中的输入值,即为flag,提交即可) 注意:得到的 flag 请包上 flag{} 提交 拖到id ...
 - vultr vps 开启BBR加速 (CentOS 7)
			
上个月买的vultr的vps 感觉看视频还是比较慢的 于是上网找教程开启BBR加速 在这里记录一下 以后可能会用到 BBR 是 Google 提出的一种新型拥塞控制算法,可以使 Linux 服务器显著 ...
 - zabbix监控java
			
参考: 官网: https://www.zabbix.com/documentation/4.0/manual/config/items/itemtypes/jmx_monitoring
 - c++实现直接插入排序
			
基本概念 直接插入排序是一种最简单的排序方法,排序过程为:先将第一个元素看作是只有一个元素的有序子表,然后从第二个元素开始,将待排序元素依次插入到前面有序的子表中,直到全部排序完毕.在整个过程中,前面 ...