2010-02-16 13 views

Respuesta

17

El tipo de firma de la función signal es un poco más clara cuando una typedef se utiliza para los punteros de función que se contagian entre sí:

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

sighandler_t es un puntero a una función que toma un parámetro int y no devuelve nada. La función signal toma dicho puntero de función como su segundo parámetro. También devuelve un puntero a función de ese tipo.

1

Las declaraciones C deben leerse de adentro hacia afuera. La parte difícil con declaraciones de funciones complejas es averiguar cuál es el declarador más interno (por dónde empezar). Generalmente es el primer identificador que no es un identificador de tipo. Así que en este caso:

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

la declarador es signal. Dentro del paréntesis, los sufijos son de mayor precedencia que los prefijos, por lo que signal es una función que toma dos argumentos (la parte (int signo, void *(func)(int))), que devuelve un puntero (el prefijo *) a una función que toma un único int arg ((int) en el extremo), y devolver void

Cuestiones relacionadas