Typedef有两组括号?

时间:2012-03-01 11:55:45

标签: c++

我在某些代码中遇到过typedef:

typedef void (NE_API *NeWindowProcCallback)(void* hWnd, NEuint uMsgId, NEuint wParam, NEuint64 lParam);

但是,我不熟悉这种语法。任何人都能解释一下吗?

另外,如果我跳到NE_API的声明,我会发现:

#   define NE_API __stdcall

我认为这可能与答案有关,对此的解释也将非常感激。谢谢。

4 个答案:

答案 0 :(得分:5)

这是函数指针的typedef,函数返回void,具有__stdcall调用约定,并接受四个参数。因此,您可以将具有此签名的任何函数的地址分配给类型为NeWindowProcCallback的变量。然后,可以将此变量作为参数传递给期望回调函数的其他函数。有关如何使用函数指针的更多详细信息,请参阅this

答案 1 :(得分:1)

你可以看到__stdcall在这里: What is __stdcall? 至于typedef - 这是typedef函数的方法。现在类型NeWindowProcCallback将是一个指向带参数类型的函数的指针(void * hWnd,NEuint uMsgId,NEuint wParam,NEuint64 lParam)。

所以你可以这样做:

void  foo(void* hWnd, NEuint uMsgId, NEuint wParam, NEuint64 lParam);


int main() {
  NeWindowProcCallback my_func = foo;
  ....
  // use the pointer
}

答案 2 :(得分:1)

NeWindowProcCallback是函数指针的类型。它采用参数void* hWnd, NEuint uMsgId, NEuint wParam, NEuint64 lParam,并返回void

__stdcallcalling convention,它确定如何在生成的调用汇编代码中传递参数。

答案 3 :(得分:0)

typedef将 NeWindowProcCallback 定义为存储指向返回 void 的函数的指针的类型(void * hWnd,NEuint uMsgId,NEuint wParam,NEuint64 lParam)作为参数