Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Poziom X - Lekcja: Wskaźnik na funkcję

Ostatnio zmodyfikowano 2018-06-13 20:14
Autor Wiadomość
aerocell
Temat założony przez niniejszego użytkownika
Poziom X - Lekcja: Wskaźnik na funkcję
» 2018-06-13 19:18:59
Hej,
nie wiem czy to problem ze zrozumieniem działania wskaźników na funkcje czy błąd leży gdzie indziej, lecz chcąc zadeklarować owy wskaźnik (do uchwytu)

C/C++
typedef void( * handler )( int );

void registerHandler( int, handler );


...


void registerHandler( int signal, handler handler ) {
    sigset_t iset;
    struct sigaction act;
   
    sigemptyset( & iset );
   
    act.sa_handler = & handler;
    act.sa_mask = iset;
    act.sa_flags = 0;
   
    sigaction( signal, & act, NULL );
}


Przy kompilacji cały czas wyskakuje błąd:

In function ‘void registerHandler(int, handler)’:
error: cannot convert ‘void (**)(int)’ to ‘__sighandler_t {aka void (*)(int)}’ in assignment

A z tego co sprawdzałem w dokumentacji, to sighandler_t jest dokładnie tego samego typu, czyli

void( * __sighandler_t )( int )


znalezione tu -> http://students.mimuw.edu.pl/SO/LabLinux/STRUKTURY/PROCESY/sigaction.html#__sighandler_t

P-171543
pekfos
» 2018-06-13 19:49:42
C/C++
act.sa_handler = & handler;
Jaki sens ma przypisanie adresu argumentu funkcji? Po wyjściu z funkcji adres nie będzie wskazywać na nic poprawnego.
P-171547
aerocell
Temat założony przez niniejszego użytkownika
» 2018-06-13 20:14:28
Ale fail, nie zauważyłem :x Działa, dzięki!
P-171548
« 1 »
  Strona 1 z 1