Преобразование целого числа в указатель функции в сигнальном коде - почему это работает?

Я читаю книгу («Расширенное программирование в среде UNIX») и просматриваю раздел о сигналах.

При использовании функции сигнала:

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

параметр func может быть указателем на функцию, определенную пользователем, или это может быть SIG_ERR, SIG_DFL или SIG_IGN.

Мой вопрос не относится к UNIX, но я хотел бы рассказать об этом. Что я действительно хочу знать, так это то, что в книге говорится, что эти константы определяются как:

#define SIG_ERR (void (*)())-1

и тому подобное для 0 и 1.

Теперь у меня есть несколько приличных предположений, но для экономии времени - может кто-нибудь сказать мне, что черт возьми, это делает и почему это работает?

Кроме того, есть ... эээ ... уборщик? способ написать это, предполагая, что я использую C ++ и взаимодействую с этим C API?

10
задан John Humphreys - w00te 7 December 2011 в 17:12
поделиться