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

void (*func)(const Arg *arg) w strukturze

Ostatnio zmodyfikowano 2020-08-30 19:33
Autor Wiadomość
kocotian
Temat założony przez niniejszego użytkownika
void (*func)(const Arg *arg) w strukturze
» 2020-08-30 18:44:15
Witam serdecznie. Czytając kod dwm (dwm.suckless.org) natrafiłem na takie dziwne coś w strukturze:
C/C++
typedef struct {
    unsigned int click;
    unsigned int mask;
    unsigned int button;
    void( * func )( const Arg * arg ); /* chodzi o tą linię */
    const Arg arg;
} Button;
wcześniej jest jeszcze unia:
C/C++
typedef union {
    int i;
    unsigned int ui;
    float f;
    const void * v;
} Arg;
czy ktoś zdołałby mi wyjaśnić na czym to polega? Myślałem czy nie jest to po prostu rzutowanie, ale dziwi mnie, że po nazwie typu znajduje się tak jakby definicja drugiej zmiennej (
const Arg * arg
)
Pozdrawiam

//PS. - to jest C99
P-177489
pekfos
» 2020-08-30 19:25:20
To jest wskaźnik na funkcję zwracającą void i przyjmującą jeden argument const Arg*.
P-177490
kocotian
Temat założony przez niniejszego użytkownika
» 2020-08-30 19:33:28
Dang, dzięki, to by też wyjaśniało dlaczego w pliku konfiguracyjnym możemy dzięki takiej strukturze:
C/C++
typedef struct {
    unsigned int mod;
    KeySym keysym;
    void( * func )( const Arg * );
    const Arg arg;
} Key;
zadeklarować w łatwy sposób bindingi:
C/C++
static Key keys[] = {
    /* modifier                     key        function        argument */
    { MODKEY, XK_p, spawn, {.v = dmenucmd } },
    /* ... */
}

Jeszcze raz dzięki, zamykam i pozdrawiam
P-177491
« 1 »
  Strona 1 z 1