#define class(cls) cls##_object * #define create(cls) ((class(cls)) malloc(sizeof(cls##_object))) #define subclass(cls) cls##_class cls #define classdef(cls) \ typedef struct cls##_class cls##_class; \ typedef struct { \ cls##_class cls; \ } cls##_object; \ struct cls##_class classdef(BaseObject) { uint32 refcount; }; #define incref(object) do { ++object.BaseObject.refcount; } while(0) #define decref(object) do { --object.BaseObject.refcount; } while(0) classdef(TestObject) { subclass(BaseObject); uint32 test; }; int main(int argc, char **argv) { class(TestObject) foo = create(TestObject); foo.TestObject.test = 5; printf("%i\n", foo.TestObject.test); printf("%i\n", foo.BaseObject.refcount); }