typedef struct foo_ foo; enum { FOO_SIZE = 64 }; foo *foo_init(void *p, size_t sz); void foo_destroy(foo *p); #define FOO_ALLOCA() \ foo_init(alloca(FOO_SIZE), FOO_SIZE)
struct foo_ { uint32_t magic; uint32_t val; }; foo *foo_init(void *p, size_t sz) { foo *f = (foo *)p; f->magic = 1234; f->val = 0; return f; }
foo *f = FOO_ALLOCA(); // Can’t see inside // APIs validate magic