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);
}
|