#include <stdio.h> #include <stdlib.h> typedef struct user_t { int t; char *userName; void (*setUserName)(char* name,int); void (*print)(); }UserT; /*重点在这里*/ #define THIS_CALL \ int ex;\ {_asm mov ecx, ebp}\ {_asm sub eax, ecx}\ {_asm sub eax, 4h}\ {_asm mov ecx, eax}\ {_asm mov eax, ebp}\ {_asm go_sub :}\ {_asm add eax, 4}\ {_asm sub ecx, 4h}\ {_asm jg go_sub}\ {_asm mov ecx, esp}\ {_asm mov esp, eax}\ {_asm pop eax}\ {_asm mov ex, eax}\ {_asm mov esp, ecx} #define FUNC(Type,f,arg) f##arg {\ THIS_CALL \ Type this;\ this = (Type)ex;\ //GO语言定义方式 #define func(Type,f,arg,rt) rt f##arg {\ THIS_CALL \ Type this;\ this = (Type)ex;\ func (UserT*, setUserNamae, (char *name, int a),void) this->userName = name; this->userName = name; } func (UserT*, print, (), void) printf("%s\n", this->userName); } #define CALL_S(e)\ size_t addr = e; \ {_asm mov eax, esp}\ {_asm push addr} #define $$(e) {CALL_S(e);} (0,\ e)\ void initUser(struct user_t* u) { u->setUserName = setUserNamae; u->print = print; } int main() { struct user_t User;initUser(&User); $$(&User)->setUserName("张飞", 2); $$(&User)->print(); while (1){} }