2012-01-24 228 views
4

有人可以解釋這個語句做什麼嗎?C++,預處理器語句

#define CONST_SIG (void (*)()) 1 
+0

它的哪個部分是您無法理解的?一般來說,你知道'#define'的作用嗎? –

+1

總的來說,最好在整個表達式中加上一組額外的括號,儘管演員的優先級足夠高,以至於它可能是安全的。 –

回答

3

這個語句定義CONST_SIG1澆鑄成一個指向變得沒有任何參數和返回void功能。這可能是有用的,如果你有一個函數的指針,你也許測試它的真實性,那麼CONST_SIG將是真實的。

您可以嘗試在許多Linux發行版中可用的cdecl程序,用於C語言的「英語翻譯」。在這種情況下的輸出示例:

cdecl> explain (void (*)()) 
cast unknown_name into pointer to function returning void 

旁註:它說「unknown_name」的原因是因爲我們的指針沒有名字。舉例來說,「p」,看起來像這樣:(void (*p)())

3

您可以將CONST_SIG傳遞給需要函數指針的函數,並將值1作爲該函數指針的特殊值。