定义一个宏,它接受一个结构实例并为每个’void *’成员调用’fre
发布时间:2020-12-16 10:10:18 所属栏目:百科 来源:网络整理
导读:我有几种类似的结构类型. 每种类型都有几种不同类型的成员. 例如: struct A{ char a1; short a2; void* a3; int a4; void* a5;};struct B{ void* b1; long b2; void* b3; void* b4;}; 我想定义一个宏,它接受一个结构实例并为每个void *成员调用free. 我认为
我有几种类似的结构类型.
每种类型都有几种不同类型的成员. 例如: struct A { char a1; short a2; void* a3; int a4; void* a5; }; struct B { void* b1; long b2; void* b3; void* b4; }; 我想定义一个宏,它接受一个结构实例并为每个void *成员调用free. 我认为__VA_ARGS__在这里可能有用,但我不太清楚如何. 任何替代想法(包括运行时解决方案)也将受到赞赏. 解决方法
也许与X Macros?
#define structAFields X(char,a1,) X(short,a2,) X(void*,a3,) X(int,a4,a5,) #define X(A,B,C) A B C; struct A { structAFields }; #undef X #define X(A,C) if(strcmp(#A,"void*") == 0) *((void **)((void *)(&a->B))) = malloc(2); void mallocA(struct A * a) { structAFields } #undef X #define X(A,"void*") == 0) free(*((void **)((void *)(&a->B)))); void freeA(struct A * a) { structAFields } #undef X int main(int argc,char **argv) { struct A a; mallocA(&a); freeA(&a); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |