2010-12-13 58 views
5

我不明白,爲什麼下面的聲明被接受:爲什麼括號在函數指針聲明中很重要?

typedef void (*_tStandardDeclaration)(LPVOID); 

而下面沒有:

typedef void *_tDeclarationWithoutParenthesis(LPVOID); 
typedef void* _tAlternateDeclaration(LPVOID); 

我使用MSVC6(我知道這是過時的,非標準的,但需要保持每年10萬的收入系統:/)

+4

請注意,所有這些typedef聲明是有效的。無無效C++。 – 2010-12-13 02:51:46

回答

11

指針符號默認綁定到類型,所以函數指針需要括號來指示指針實際上是名稱而不是返回Ť YPE。

5

沒有括號,你聲明的函數返回void*,而不是指向返回void的函數的指針。

3

下面沒有維特通過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參數)。

你可以用它們來聲明函數指針:

​​

樂趣,是不是...

相關問題