typedef是一種有趣的聲明方式,它爲一種類型引入新的名字,而不是爲變量分配空間。
一般情況下,typedef用來簡潔地表示指向其他東西的指針。
以signal()原型的聲明爲例。
signal()是一種系統調用,用於通知運行時系統,當某種特定的軟件中斷髮生時調用特定的程序。
當你調用signal(),需要通過參數傳遞告訴它中斷的類型以及用於處理中斷的程序。
signal()聲明如下:
void *(signal(int sig, void (*func)(int)))(int);
讓我們用剛纔掌握的技巧來分析這個聲明,會發現它的意思如下:
void (*signal( ) )(int);
signal是一個函數,它返回一個函數指針,後者所指向的函數接受一個int參數,並返回void。
其中一個恐怖的參數就是其本身:
void (*func)(int);
它表示一個函數指針,鎖指向的函數接受一個int參數,返回值是void。
現在讓我們體會一下,怎樣用typedef來代替通用部分,從而進行簡化。
typedef void (*ptr_to_func)(int);
// 它表示ptr_to_func是一個函數指針,該函數接受一個int參數,返回值爲void
ptr_to_func signal(int,ptr_to_func);
// 它表示signal是一個函數,它接受連個參數,
// 其中一個是int,另一個是ptr_to_func,返回值是ptr_to_func