- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
void TInputTID::AvWnd(GtkWidget* w, char* name, int bOut, void (*cb) (int wnd, int data))
{
// Тут объявления локальных переменных и не относящиеся к делу манипуляции
if(((int)cb) != -1) // Шедевр
{
gtk_signal_connect ((GtkObject*)hButOK,
"clicked",GTK_SIGNAL_FUNC(cb),hOutWndBox);
}
}
Или можете просто прочитать man shmat в любой UNIX-like системе, секцию RETURN VALUES.
a) автор не имеет отношения к написанию кода ядра какой-либо UNIX-like системы или интерфейса к оному
b) мы говорим НЕ о return value которое может быть проинтерпретировано как "признак ошибки" (что и используется в shmat)
c) приведенный в качестве примера системный вызов ни фига не является примером хорошего проектирования
d) в данном случае речь идет даже не об указателе, а об указателе на функцию
e) даже если предположить, что сабскрайберу просто АЦЦКИ НЕОБХОДИМО уметь передовать признак "не подписывать ни на что" всегда есть NULL-поинтер
f) это вообще-то высокоуровневый c++ код, где не должно быть грязных хаков с упаковкой данных в указатели
g) вышеприведенное разве не очевидно?
NULLами может не пользуются потому что e.g. gtk_signal_connect() их специально обрабатывает.
((unsigned long)-1))))))))))))))))))))))
Ну отжёг. ))))))))))))))))))
GINT_TO_POINTER
GPOINTER_TO_INT
догадайтесь что делают :) вот тут тот самый случай, когда приходится идти на поводу у создателей Gtk