+ -
当前位置:首页 → 问答吧 → typedef 在函数前面的用法

typedef 在函数前面的用法

时间:2011-12-05

来源:互联网

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什么作用。
  上面的和 下面的联系 怎么回事呢

作者: EmbeddedLong   发布时间: 2011-12-05

这是 函数指针中typedef 的用法

可参考
http://wenku.baidu.com/view/e9efb70879563c1ec5da7153.html

作者: sxbwelcome   发布时间: 2011-12-05

第二部分需要在第一部分前定义吧。

作者: cfjtaishan   发布时间: 2011-12-05

既然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)

作者: studyCBC   发布时间: 2011-12-05

google 成员函数指针

作者: mosal   发布时间: 2011-12-05

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;

作者: qq120848369   发布时间: 2011-12-05

引用 3 楼 studycbc 的回复:
既然LZ知道typedef 就是取别名,那应该理解啊

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

第二个是给结构体取名字

typedef void WM_CALLBACK( WM_MESSAGE* pMsg);

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

WM_CALLBACK vm_CALLBACK;
vm_CALLBACK = fun;……


还是有一点不是很清楚,
我知道比如 typedef char (*f)(int ) //这是是定义了一个f的函数,一个带有int参数的,且指向char的函数。

那对于typedef void WM_CALLBACK( WM_MESSAGE* pMsg);  
里面的函数是WM_MESSAGE 具有pMsg参数的指针 返回的也是一个函数(WM_CALLBACK)?对吗?

作者: EmbeddedLong   发布时间: 2011-12-05

typedef void (*WM_CALLBACK)( WM_MESSAGE* pMsg); //常见

typedef void WM_CALLBACK( WM_MESSAGE* pMsg); // 头次看到

作者: AnYidan   发布时间: 2011-12-05