2015-06-08 35 views
9

Tôi vừa tìm thấy điều này.((void (*) (int)) - 1) nghĩa là gì?

// /usr/include/sys/signal.h // OS X 
#define SIG_ERR ((void (*)(int))-1) 

((void (*)(int))-1) có nghĩa là gì?

Có khác nhau để

#define SIG_ERR -1 

?

+3

Hãy xem [THIS] này (http://stackoverflow.com/questions/8419483/casting-integer-to-function-pointer-in-signal-code-why-does-this-work) – LPs

Trả lời

8

này được đúc để một hàm-con trỏ:

((type) value) 

đâu loại là void (*)(int) đó là con trỏ đến chức năng chấp nhận một int đối số và trả về void, mà là thực sự là một dấu hiệu của một xử lý tín hiệu:

typedef void (*sighandler_t)(int); 

Bạn có thể giải mã các loại như vậy với cdecl công cụ hoặc trang web: http://cdecl.org/

+0

xin lỗi, nhưng [ cdecl nói điều này] (http://cdecl.ridiculousfish.com/?q=%28%28void+%28*%29%28int%29%29-1%29). –

+0

Vâng @SouravGhosh, bạn nói đúng, cdecl nói có một thất bại, nhưng thực sự, myaut là hoàn toàn chính xác theo tôi x). Đoán cdecl không thành công trên loại dàn diễn viên –

+0

@SouravGhosh; Đó là lý do tại sao tôi đề nghị mọi người không sử dụng cdecl. – haccks

2

Đây là một phôi -1 vào con trỏ hàm được mong đợi là loại SIG_ERR. Sử dụng -1 trực tiếp không hoạt động ở các tình huống mà trình biên dịch cần loại chính xác.

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