Чтение определений функций в C - PullRequest
6 голосов
/ 11 февраля 2011

Я - разработчик Java, и по какой-то причине я сейчас изучаю C.Дело в том, что у меня возникают проблемы с чтением определений функций.Не могли бы вы дать мне подсказку, например:

void (*signal(int sig, void(*func)(int)))(int)

Спасибо, ребята!

Ответы [ 3 ]

4 голосов
/ 11 февраля 2011

Вы должны выучить правило справа налево .Эта страница содержит хорошие примеры.

signal - это функция, принимающая в качестве аргументов:

  • целое число
  • указатель на функцию, принимающую int и ничего не возвращающую

и возвращает указатель на функцию, принимающую int и ничего не возвращающую.

2 голосов
/ 11 февраля 2011

Пример 'cdecl' в действии. Я думаю, что он доступен для Linux или исходного кода, который можно скачать и собрать.

cdecl> explain char *(*fptab[])()
declare fptab as array of pointer to function returning pointer to char
cdecl> 
2 голосов
/ 11 февраля 2011

func - указатель на функцию, которая принимает int и возвращает void.

signal - это функция, которая принимает int и указатель, такой как func ивозвращает указатель наподобие func.

То есть: вы указываете, какой обработчик сигнала ( func ) связан с сигналом ( sig ), а функция возвращает обработчик сигнала(предыдущий), который вы можете хранить где-то.

...