aboutsummaryrefslogtreecommitdiff
path: root/2025-linuxdays/funcptr.c
blob: e4b3a83fc7a83903989d39f19351fdc5976c26d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

typedef void (*cb_t)(void *, int);
typedef cb_t *scb_t;
struct cb {
  cb_t cb;
  const char *str;
};
void cb(void *self, int v) {
  struct cb *s = self;
  printf("%s: %d\n", s->str, v);
}
#define callcb(CB, ...) (*(CB))(CB, __VA_ARGS__)

int main(int argc, char *argv[]) {
  struct cb c = {.cb = cb, .str = "Hello"};
  scb_t sc = &c.cb;
  callcb(sc, 42);
}