2010-02-16 60 views

回答

17

signal函數的類型簽名是一個比較明確的當的typedef用於被傳來傳去的函數指針:

typedef void (*sighandler_t)(int); 
sighandler_t signal(int signo, sighandler_t func); 

sighandler_t是一個指針,它接受一個int參數,並且沒有返回的功能。函數signal函數將第二個參數作爲函數指針。它也返回該類型的函數指針。

1

需要從內向外讀取C聲明。複雜函數聲明的棘手部分是找出哪個是最內層的聲明器(從哪裏開始)。它通常是第一個不是類型標識符的標識符。因此,在這種情況下:

void (*signal(int signo, void *(func)(int)))(int) 

的聲明部分爲signal。在括號內,後綴的優先級高於前綴,因此signal是一個帶有兩個參數((int signo, void *(func)(int))部分)的函數,它返回一個指針(前綴爲*)給一個採用一個int arg(末尾爲(int))的函數,並返回void

相關問題