typedef int(init_fnc_t) (void)的理解

Posted idyllcheung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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声明的类型名的第一个字母用大写表示,以便于系统提供的标准类型标识符相区别。

以上是关于typedef int(init_fnc_t) (void)的理解的主要内容,如果未能解决你的问题,请参考以下文章

typedef int a[10]; int str[10]; a b; a* c[10]; a* d; 不懂

typedef void (*funcptr)(void) typedef void (*PFV)(); typedef int32_t (*PFI)();

typedef static int INT32为什么编译失败了?

当我使用 typedef 或使用 int 时,它仍然是 int 多少?

typedef void (*Fun) (void)

typedef void (*Fun) (void)