#define class(cls) cls##_object * #define create(cls) ((class(cls)) malloc(sizeof(cls##_object))) #define subclass(cls) cls##_class cls; #define classdef(cls, sub...) \ typedef struct cls##_class cls##_class; \ typedef struct { \ sub \ 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); }