我不明白为什么接受以下声明:
typedef void (*_tStandardDeclaration)(LPVOID);
而以下情况不是:
typedef void *_tDeclarationWithoutParenthesis(LPVOID);
typedef void* _tAlternateDeclaration(LPVOID);
我正在使用MSVC6(我知道它已过时且非标准,但需要保持每年十亿的收入系统:/)
答案 0 :(得分:12)
默认情况下,指针符号绑定到类型,因此函数指针需要括号来指示指针实际上在名称上而不是返回类型。
答案 1 :(得分:6)
如果没有括号,则表示函数返回void*
,而不是指向返回void
的函数的指针。
答案 2 :(得分:4)
下面的代码在MacOS X 10.6.5上通过GCC 4.2.1接受,而编译器设置为挑剔:
c++ -Wall -Wextra -c xx.cpp
代码:
typedef void *LPVOID;
typedef void (*_tStandardDeclaration)(LPVOID);
typedef void *_tDeclarationWithoutParenthesis(LPVOID);
typedef void* _tAlternateDeclaration(LPVOID);
第一个给出一个返回void
的函数的指针;后两个是等价的(间隔没有区别),并给你一个类型''函数(采用LPVOID参数),返回指向void'的指针。
您可以使用它们来声明函数指针:
typedef _tDeclarationWithoutParenthesis *_tFunctionPointer;
有趣,不是吗......