有没有可能的方法在运行时检查结构成员?
例如,请考虑以下代码,
#include <stdio.h>
struct example{
int value;
char name[32];
int score;
};
int main()
{
char in[256]={};
printf("enter member name :\n");
scanf("%s",in);
if(check_member(in) == 1) {
printf("struct example has member %s \n,in);
return 0;
}
printf("struct example has no member named %s \n,in);
return -1;
}
如果我输入value
到这个程序,它应该打印
struct example具有成员值
当我向此程序输入test
时,它应该打印
struct example没有名为test
的成员
有没有办法编写函数check_member()
?
答案 0 :(得分:2)
这是不可能的,因为在编译之后,变量的名称不会仅仅保存在堆栈的内存中,因此无法在运行时获取数据。 当然,@ Yunnosch说你可以用字符串保存成员的名字然后使用strcmp。
答案 1 :(得分:1)
这可能有很多重复的答案。如果我必须这样做,我会采用以下两种方式之一:
我会建立自己的结构成员名称,他们的偏移量,或许他们的类型的小词典。我会使用标准offsetof()
宏来操纵偏移量。维护字典会很麻烦(特别是如果从结构中添加或删除成员可能很频繁),但是不可避免。我会抵制使用预处理器技巧来“缓解”结构和字典定义的维护的诱惑,因为从长远来看,这些往往会更加混乱。
我根本不会使用C struct
,但会实现我自己的关联数组(可能使用哈希表)。
哦,等一下: