typedef int(init_fnc_t) (void);什么意思

vincent29 2011-07-08 06:05:22
typedef int(init_fnc_t) (void);这句话是什么意思啊?


看不懂,是XLOADER程序里面的。


如果定义的是函数指针的话int(*init_fnc_t) (void);

应该有这个星号吧?
...全文
873 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
comwise 2013-06-13
  • 打赏
  • 举报
回复
9楼一语惊醒梦中人 理解的是深刻 道出来就是不一样
引用 9 楼 coolman2007 的回复:
// // //虽然别人已经回答 我想通过我自己的方式回答一下 以提供不同于别人的解决问题的想法 // // 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);
	init_fnc_t *MyFunction;
	MyFunction = GetData;
	printf("%d",MyFunction());
	return 0;
}
这个时候打印出来的结果就是 101
forzals 2013-05-22
  • 打赏
  • 举报
回复
9楼回答的真清楚,学习了
canhui2009 2012-09-04
  • 打赏
  • 举报
回复
谢谢9楼的帖子,让我理解的更深刻了,呵呵呵。。。。
forzals 2012-07-13
  • 打赏
  • 举报
回复
9楼 回答的好清楚,学习了
sjmp 2012-05-18
  • 打赏
  • 举报
回复
9楼 ,very good.
Frog1228 2012-01-29
  • 打赏
  • 举报
回复
这是类型别名,不一定是*init_fnc_t,不是变量的定义。
typedef int(init_fnc_t) (void); 相当于为参数是void类型,返回值是int类型的函数类型取了个别名。
developer_wgl 2011-10-31
  • 打赏
  • 举报
回复
努力努力
craboy1 2011-07-16
  • 打赏
  • 举报
回复
收藏!
a554326643 2011-07-16
  • 打赏
  • 举报
回复
努力奋斗
lang8134 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 coolman2007 的回复:]
//
//
//虽然别人已经回答 我想通过我自己的方式回答一下 以提供不同于别人的解决问题的想法
//
//

typedef int(init_fnc_t) (void);
这个就是一个取别名的过程。

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

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

而对于……
[/Quote]
赞一个,思路和解释都非常清晰。
就想叫yoko 2011-07-11
  • 打赏
  • 举报
回复
学习~~
AnYidan 2011-07-11
  • 打赏
  • 举报
回复
typedef int(init_fnc_t) (void);这句话是什么意思啊

-- 为 没有形式参数,返回值是int 的函数其了一个新名字

例子见 7 楼
小男孩与胖子 2011-07-11
  • 打赏
  • 举报
回复
//
//
//虽然别人已经回答 我想通过我自己的方式回答一下 以提供不同于别人的解决问题的想法
//
//

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);
init_fnc_t *MyFunction;
MyFunction = GetData;
printf("%d",MyFunction());
return 0;
}

这个时候打印出来的结果就是 101
至善者善之敌 2011-07-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 coding_hello 的回复:]
int aa()
{
return 0;
}

int main(int argc, char *argv[]) {
typedef int(init_fnc_t) (void);

init_fnc_t* xx = aa;

printf("%d", xx());
return 0;
}
[/Quote]



++++1
野男孩 2011-07-10
  • 打赏
  • 举报
回复

int aa()
{
return 0;
}

int main(int argc, char *argv[]) {
typedef int(init_fnc_t) (void);

init_fnc_t* xx = aa;

printf("%d", xx());
return 0;
}
  • 打赏
  • 举报
回复
声明的时候加上星号就行。。
Athenacle_ 2011-07-08
  • 打赏
  • 举报
回复
一个函数类型罢了
就像
typedef int apple;
typedef int* orange;
之间的区别
Gary_Hendrix 2011-07-08
  • 打赏
  • 举报
回复
不懂,指针没听说过可以去掉*号
Jxiaoshen 2011-07-08
  • 打赏
  • 举报
回复
没有*号也可以
声明变量时要这样init_fnc_t *pinit_fnc_t;加*号


typedef int(*init_fnc_t) (void);
init_fnc_t pinit_fnc_t;

typedef int(init_fnc_t) (void);
init_fnc_t *pinit_fnc_t;

两者一样
ningto.com 2011-07-08
  • 打赏
  • 举报
回复
函数指针的话确实有个*号

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧