读书人

typedef 在函数前面的用法解决方案

发布时间: 2012-03-18 13:55:39 作者: rapoo

typedef 在函数前面的用法
typedef void WM_CALLBACK( WM_MESSAGE* pMsg);


typedef struct {
int MsgId; /* type of message */
WM_HWIN hWin; /* Destination window */
WM_HWIN hWinSrc; /* Source window */
union {
void* p; /* Some messages need more info ... */
int v;
GUI_COLOR Color;
} Data;
} WM_MESSAGE

没明白在函数前面加这个typedef作用 ,我知道typedef是起别名的,在结构体里面也是为了简化,不过没理解这里的typedef什么作用。
上面的和 下面的联系 怎么回事呢

[解决办法]
这是 函数指针中typedef 的用法

可参考
http://wenku.baidu.com/view/e9efb70879563c1ec5da7153.html
[解决办法]
第二部分需要在第一部分前定义吧。
[解决办法]
既然LZ知道typedef 就是取别名,那应该理解啊

第一个是给特定函数取名字

第二个是给结构体取名字

typedef void WM_CALLBACK( WM_MESSAGE* pMsg);

void fun(WM_MESSAGE *Msg)
{
......
}

WM_CALLBACK vm_CALLBACK;
vm_CALLBACK = fun;
WM_MESSAGE *Msg;
vm_CALLBACK(Msg)
[解决办法]
google 成员函数指针
[解决办法]

C/C++ code
typedef struct {  int MsgId; /* type of message */  WM_HWIN hWin; /* Destination window */  WM_HWIN hWinSrc; /* Source window */  union {  void* p; /* Some messages need more info ... */  int v;  GUI_COLOR Color;  } Data;} WM_MESSAGE;typedef void WM_CALLBACK( WM_MESSAGE* pMsg);   是这样的吧,下边是函数别名,WM_CALLBACK *pfunc就是函数指针了。也可以直接typedef void (*WM_CALLBACK)( WM_MESSAGE* pMsg); WM_CALLBACK pfunc;
[解决办法]
typedef void (*WM_CALLBACK)( WM_MESSAGE* pMsg); //常见

typedef void WM_CALLBACK( WM_MESSAGE* pMsg); // 头次看到
[解决办法]
学习了! 自定义类型. 楼上说的也是哈. 第一次见到! 继续努力!
[解决办法]
定义类型:
typedef void (*WM_CALLBACK)( WM_MESSAGE* pMsg);
void f()( WM_MESSAGE* pMsg);

WM_CALLBACK xxx;
xxx=f;


相当于:
void xxx( WM_MESSAGE* pMsg);

实际上就是利用指向函数的指针这一特性。

如果使用:
typedef void WM_CALLBACK( WM_MESSAGE* pMsg);
就有问题了,再想用:
xxx=f;
编译器就无法通过了。

读书人网 >C语言

热点推荐