Ho appena trovato questo.Che cosa significa ((void (*) (int)) - 1)?
// /usr/include/sys/signal.h // OS X
#define SIG_ERR ((void (*)(int))-1)
Cosa significa ((void (*)(int))-1)
parte?
E 'diverso da
#define SIG_ERR -1
?
Ho appena trovato questo.Che cosa significa ((void (*) (int)) - 1)?
// /usr/include/sys/signal.h // OS X
#define SIG_ERR ((void (*)(int))-1)
Cosa significa ((void (*)(int))-1)
parte?
E 'diverso da
#define SIG_ERR -1
?
questo è gettato a una funzione-pointer:
((type) value)
Dove tipo è void (*)(int)
che è puntatore a funzione di accettare una int
argomento e tornare void
, che è in realtà è una firma di un gestore di segnale:
typedef void (*sighandler_t)(int);
Si può decodificare tali tipi con cdecl
utensile o sito web: http://cdecl.org/
scusa, ma [ cdecl dice questo] (http://cdecl.ridiculousfish.com/?q=%28%28void+%28*%29%28int%29%29-1%29). –
Bene @SouravGhosh, hai ragione, cdecl dice che c'è un errore, ma in realtà, myaut è totalmente corretto secondo me x). Indovina che cdecl non funziona su quel tipo di cast –
@SouravGhosh; Ecco perché suggerisco alle persone di non usare cdecl. – haccks
Questo è un cast di -1 nel puntatore della funzione che è previsto come il tipo di SIG_ERR. L'utilizzo di -1 direttamente non funziona in situazioni in cui il compilatore ha bisogno del tipo corretto.
Dai un'occhiata a [QUESTO] (http://stackoverflow.com/questions/8419483/casting-integer-to-function-pointer-in-signal-code-why-does-this-work) – LPs