#define _TO_STRUCT_NAME(name) struct s_##name
// 用于定义类与实例化对象
#define CLASS_START_DEFINE(name) _TO_STRUCT_NAME(name)
#define CLASS_TYPE(type) _TO_STRUCT_NAME(type)* // 用于表示自身类型
#define CLASS_END_DEFINE(type) ; typedef CLASS_TYPE(type) type;
#define CLASS_NEW(type) ((type) malloc(sizeof(_TO_STRUCT_NAME(type)))) // 这里也可以用calloc
// 简化写法
#define START CLASS_START_DEFINE
#define TYPE CLASS_TYPE
#define END CLASS_END_DEFINE
#define NEW CLASS_NEW
使用例
START(Person) {
int age;
TYPE(Person) parent;
} END(Person)
void sayAge(Person THIS) {
printf("age: %d\n", THIS->age);
}
int main(void) {
Person t = NEW(Person);
t->age = 24;
t->parent = NEW(Person);
sayAge(t);// age: 24
sayAge(t->parent);// age: 某个随机数
return 0;
}