这个是指什么

heytry 2011-08-20 01:41:58
typedef void (*funcptr)(void);
typedef void functype(void);

void myfunc(void)
{
...
}

funcptr p1 = &myfunc;
functype *p2 = &myfunc;

上面的代码都没问题,但下面这个变量代表什么呢:

functype x;

函数对象(gcc中用sizeof(x)输出是1)? 这样的一个变量有啥用处.
...全文
189 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
heytry 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 anyidan 的回复:]

typedef void functype(void);
functype x;

首次见,能编译通过吗?强烈怀疑
[/Quote]
我用gcc编译通用,我是在某处看到有人这样定义函数指针:
typedef int functype(int);
functype *ptr = &myfunc;
因为我以前都是 typedef int (*funcptr)(int); 这么用的.
然后我就在想functype x;这样的一个东西能代表什么.
staticabc 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ljljlj 的回复:]
functype x;
无效的声明!
[/Quote]
+1
ljhhh0123 2011-08-20
  • 打赏
  • 举报
回复
functype x;
无效的声明!
staticabc 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jialejiahi 的回复:]
sizeof 对函数使用时,要带参数,得到的结果是函数返回值类型的大小。
比如:

C/C++ code

typedef int functype(int);
functype x;
printf ("%d\n", sizeof (x (2)));
//结果为4
[/Quote]
那么楼主的这个functype x;由于无返回值,所以不能用sizeof();是吗?
staticabc 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jialejiahi 的回复:]
sizeof 对函数使用时,要带参数,得到的结果是函数返回值类型的大小。
比如:

C/C++ code

typedef int functype(int);
functype x;
printf ("%d\n", sizeof (x (2)));
//结果为4
[/Quote]
明白了
AnYidan 2011-08-20
  • 打赏
  • 举报
回复
typedef void functype(void);
functype x;

首次见,能编译通过吗?强烈怀疑
heytry 2011-08-20
  • 打赏
  • 举报
回复
很多朋友没搞清楚我的问题,我问的不是这个能不能编译(我证明在gcc中确实能编译),
我是想知道这么一个东西它到底有啥用。
typedef void functype(int);
typedef int functype(int); (这样也成,如果vc只能编译这个的话)
然后我们就有了一个变量x:
functype x;
这个x在程序中什么地方会用到它, 它存在的价值是什么.
heytry 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 staticabc 的回复:]

C/C++ code

#include<stdio.h>

typedef void (*funcptr)(void);
typedef void functype(void);

functype x;
void main()
{
printf("%d\n",sizeof(x));//error C2070: illegal sizeof operand
}

VC里不能这样用s……
[/Quote]
嗯,gcc4.5中能编译通过
heytry 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jxiaoshen 的回复:]

函数对象可以携带附加数据,而函数指针就不行
class less
{
public:
less(int num):n(num){}
bool operator()(int value)
{
return value < n;
}
private:
int n;
};

使用的时候:
less isLess……
[/Quote]

这位兄弟没看清题目吧,我说的东西不是c++中的函数对象
jialejiahi 2011-08-20
  • 打赏
  • 举报
回复
sizeof 对函数使用时,要带参数,得到的结果是函数返回值类型的大小。
比如:

typedef int functype(int);
functype x;
printf ("%d\n", sizeof (x (2)));
//结果为4
chen16501560 2011-08-20
  • 打赏
  • 举报
回复


好吧,我错 了,理解错了LZ的意思,,闪人
chen16501560 2011-08-20
  • 打赏
  • 举报
回复
void func(funcptr p1,..)
void func(void (*f)(void),...)

//定义了别名可以直接使用,,
chen16501560 2011-08-20
  • 打赏
  • 举报
回复
typedef void (*funcptr)(void);

函数指针的别名
staticabc 2011-08-20
  • 打赏
  • 举报
回复

#include<stdio.h>

typedef void (*funcptr)(void);
typedef void functype(void);

functype x;
void main()
{
printf("%d\n",sizeof(x));//error C2070: illegal sizeof operand
}

VC里不能这样用sizeof();
gcc里可以吗?求解释
Jxiaoshen 2011-08-20
  • 打赏
  • 举报
回复
函数对象可以携带附加数据,而函数指针就不行
class less
{
public:
less(int num):n(num){}
bool operator()(int value)
{
return value < n;
}
private:
int n;
};

使用的时候:
less isLess(10);
cout << isLess(9) << " " << isLess(12); // 输出 1 0

http://www.cnblogs.com/ly4cn/archive/2007/07/21/826885.html
百度很多 建议楼主看看
玩笑 2011-08-20
  • 打赏
  • 举报
回复
貌似没啥用,只能做函数声明吧

69,373

社区成员

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

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