我不明白,为什么下面的声明被接受:为什么括号在函数指针声明中很重要?
typedef void (*_tStandardDeclaration)(LPVOID);
而下面没有:
typedef void *_tDeclarationWithoutParenthesis(LPVOID);
typedef void* _tAlternateDeclaration(LPVOID);
我使用MSVC6(我知道这是过时的,非标准的,但需要保持每年10万的收入系统:/)
我不明白,为什么下面的声明被接受:为什么括号在函数指针声明中很重要?
typedef void (*_tStandardDeclaration)(LPVOID);
而下面没有:
typedef void *_tDeclarationWithoutParenthesis(LPVOID);
typedef void* _tAlternateDeclaration(LPVOID);
我使用MSVC6(我知道这是过时的,非标准的,但需要保持每年10万的收入系统:/)
指针符号默认绑定到类型,所以函数指针需要括号来指示指针实际上是名称而不是返回Ť YPE。
没有括号,你声明的函数返回void*
,而不是指向返回void
的函数的指针。
下面没有维特通过GCC 4.2.1在MacOS X 10.6.5与编译器设定为模糊接受的代码:
c++ -Wall -Wextra -c xx.cpp
代码:
typedef void *LPVOID;
typedef void (*_tStandardDeclaration)(LPVOID);
typedef void *_tDeclarationWithoutParenthesis(LPVOID);
typedef void* _tAlternateDeclaration(LPVOID);
第一给出了一个指向函数的指针返回void
;后两者是等价的(间距没有区别)并给你一个类型,它是'返回指向void'的函数(取LPVOID参数)。
你可以用它们来声明函数指针:
乐趣,是不是...
请注意,所有这些typedef声明是有效的。无无效C++。 – 2010-12-13 02:51:46