2010-02-16 57 views

Trả lời

17

Các loại chữ ký của người signal chức năng rõ ràng hơn một chút khi một typedef được sử dụng cho các con trỏ chức năng được thông qua xung quanh:

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

sighandler_t là một con trỏ đến một chức năng mà phải mất một tham số int và trả về không có gì. Hàm signal lấy một con trỏ hàm như là tham số thứ hai của nó. Nó cũng trả về một con trỏ hàm của kiểu đó.

1

Tuyên bố C cần được đọc từ trong ra ngoài. Phần phức tạp với các khai báo hàm phức tạp là tìm ra người khai báo trong cùng (nơi bắt đầu). Thông thường, từ định danh đầu tiên không phải là mã định danh kiểu. Vì vậy, trong trường hợp này:

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

người khai báo là signal. Trong dấu ngoặc đơn, hậu tố là ưu tiên cao hơn tiền tố, vì vậy signal là hàm lấy hai arg (phần (int signo, void *(func)(int))), trả về một con trỏ (tiền tố *) đến hàm tham gia một arg đơn (số (int) ở cuối), và trả lại void

Các vấn đề liên quan