我不明白,爲什麼下面的聲明被接受:爲什麼括號在函數指針聲明中很重要?
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