de inicio con el identificador de más a la izquierda y su forma de trabajo, recordando que []
y ()
se unen antes de *
, por lo *a[]
es una matriz de punteros, (*a)[]
es un puntero a una matriz, *f()
es una función que devuelve un puntero, y (*f)()
es un puntero a una función:
signal -- signal
signal( ) -- is a function
signal( sig, ) -- with a parameter named sig
signal(int sig, ) -- of type int
signal(int sig, func ) -- and a parameter named func
signal(int sig, (*func) ) -- which is a pointer
signal(int sig, (*func)( )) -- to a function
signal(int sig, (*func)(int)) -- taking an int parameter
signal(int sig, void (*func)(int)) -- and returning void
*signal(int sig, void (*func)(int)) -- returning a pointer
(*signal(int sig, void (*func)(int)))( ) -- to a function
(*signal(int sig, void (*func)(int)))(int) -- taking an int parameter
void (*signal(int sig, void (*func)(int)))(int); -- and returning void
signal
asocia una función de controlador de señal func
con una señal sig
, y devuelve el puntero a la función de controlador de señal antigua:
void new_interrupt_handler(int sig)
{
... // do something interesting with interrupt signal
}
int main(void)
{
void (*old_interrupt_handler)(int);
...
/**
* Set up our new interrupt handler
*/
old_interrupt_handler = signal(SIGINT, new_interrupt_handler);
...
/**
* Restore original interrupt handler
*/
signal(SIGINT, old_interrupt_handler);
...
}
Pero aquí es donde me confundí de http://www.joyofprogramming.com/Docs_ColumnArticles/36-JoP-Dec-09.pdf –
'typedef int foo (void)': foo es un puntero a funcionar , pero puede atajarlo y decir que es una función, porque puede hacer 'foo x; x(); ' – Benoit
@Benoit puede agregarlo como respuesta? –