Запутавшись в обратных вызовах, приобщился я к новой религии - Сопрограммы! Но вот осталась одна досадная мелочь, мешающая ощутить счастье в полной мере: контроль типов параметров makecontext. В примере ниже параметр «a» передается с ошибкой. Как сделать, чтобы компилятор об этом сообщил?
$ cat makecontext.c
#include <stdio.h>
#include <ucontext.h>
void foo (const char *f, int a, int *ret)
{
*ret = printf (f, a);
}
void test (void)
{
unsigned int a = 10;
int *ret;
ucontext_t c;
makecontext (&c, foo, 3, "foo %d", a, &ret);
}
$ gcc -c -Wall makecontext.c
makecontext.c: In function ‘test’:
makecontext.c:15: warning: passing argument 2 of ‘makecontext’ from incompatible pointer type
/usr/include/ucontext.h:48: note: expected ‘void (*)(void)’ but argument is of type ‘void (*)(const char *, int, int *)’
Ну, и, пятница, же... В каких проектах используются сопрограммы? putty, samba, ещё? Какие субъективные впечатления и объективные результаты от использования сопрограмм?