typedef
в этом случае является своего рода сокращением для функции, которая возвращает void
и принимает 3 аргумента (int
, siginfo_t *
и void *
).Это в основном полезно, например, если вы хотите передать функцию в качестве обратного вызова.
void func1(sa_sigaction_t handler)
{
handler(...);
}
func1
вызывает любую функцию типа sa_sigaction_t
.Вы можете назвать это так:
void func2(int a, siginfo_t * b, void * c)
{
...
}
int main(void)
{
func1(func2);
/*
* Equivalent to:
* sa_sigaction_t handler = func2;
* func1(func2);
*/
return 0;
}
С другой стороны, если бы у вас не было typedef
, ваш код был бы более многословным:
void func1(void(*handler)(int, siginfo_t *, void*))
{
handler(...);
}
void func2(int a, siginfo_t * b, void * c)
{
...
}
int main(void)
{
func1(func2);
/*
* Equivalent to:
* void(*handler)(int, siginfo_t *, void*) = func2;
* func1(func2);
*/
return 0;
}
Что-то на заметкув том, что иногда вы увидите func2
, а другие &func2
, но это одно и то же.