C 动态识别结构成员

C 动态识别结构成员,c,C,是否有任何可能的方法在运行时检查结构成员 例如,考虑下面的代码, #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)

是否有任何可能的方法在运行时检查结构成员

例如,考虑下面的代码,

#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;
}
#包括
结构示例{
int值;
字符名[32];
智力得分;
};
int main()
{
[256]={}中的字符;
printf(“输入成员名称:\n”);
扫描频率(“%s”,英寸);
如果(检查成员(in)==1){
printf(“结构示例中有成员%s\n,in”);
返回0;
}
printf(“结构示例中没有名为%s\n的成员);
返回-1;
}
如果我向这个程序输入
,它应该打印出来

结构示例具有成员值

当我向这个程序输入
test
时,它应该打印出来

结构示例没有名为test的成员


是否有任何可能的方法来编写函数
check_member()

这是不可能的,因为编译后变量的名称不会保存在堆栈的内存中,只保存它们的位置,因此无法在运行时获取数据。
当然,正如@Yunnosch所说,您可以将成员的名称保存为字符串,然后使用strcmp。

关于这一点,可能有很多重复的答案。如果我必须这样做,我会采用以下两种方法之一:

  • 我会建立自己的结构成员名称、偏移量以及可能的类型的小词典。我将使用标准的
    offsetof()
    宏来处理偏移量。维护字典将是一件麻烦事(尤其是在结构中频繁添加或删除构件的情况下),但不可避免。我会抵制使用预处理器技巧来“简化”结构和字典定义的维护的诱惑,因为从长远来看,它们往往更容易混淆

  • 我根本不会使用C
    struct
    ,但会实现我自己的关联数组(可能使用哈希表)

  • 哦,等等,再来一个:

  • 我将使用诸如从单个更高级别的数据描述自动生成结构声明和运行时字典定义

  • C没有,所以不可能。如果你试着解释你为什么需要这个,你想要解决的实际问题是什么,那么也许我们可以帮你解决这个问题?请阅读。基本上,不,不容易。但从技术上讲,如果您为调试而构建并(以某种方式)调用调试函数(可能允许内省),这在技术上是可能的,因为您可以从二进制文件访问调试信息。因为您知道类型的结构,所以可以为显示的示例输入实现所需的输出:伪代码
    如果“value”或“name”或“core”打印“是”或打印“否”
    。请显示
    检查成员()的完整原型。
    。输入如何可用?如何选择结构?结果如何传达?布尔返回值?显示文本的Printf?像一些程序员建议的那样,在网上搜索“输入内省”或“反射”。这将证实C没有它,但你可能会发现很多关于人们如何在C中完成类似事情的提示。这是可能的,请参阅我的评论。只有当您假设OP没有描述的附加限制时,才是不可能的……是的,但是您将输入的字符串与其他字符串进行比较。我想他的问题是,有没有一种方法可以在不创建字符串变量的情况下找到struct成员的名称。是的,我的意思是假设这是不允许的。问题中没有定义,是吗?