繁体   English   中英

动态识别结构成员

[英]identifying structure members dynamically

有什么可能的方法在运行时检查结构成员?

例如,考虑以下代码,

#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 ,则应打印

结构示例具有成员价值

当我输入test到该程序时,它应该打印

struct示例没有名为test的成员

有没有可能编写函数check_member()

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

对此可能有很多重复的答案。 如果必须这样做,我将采用以下两种方法之一进行处理:

  1. 我将建立自己的关于结构成员名称,它们的偏移量以及它们的类型的小词典。 我将使用标准的offsetof()宏来处理偏移量。 维护字典会很麻烦(尤其是如果经常在结构中添加或删除成员),但这是不可避免的。 我拒绝使用预处理器技巧来“轻松”维护结构和字典定义的诱惑,因为从长远来看,它们往往会使人更加困惑。

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

哦,等等,还有一个:

  1. 我将使用诸如SWIG之类的接口定义语言从单个更高级别的数据描述中自动生成我的结构声明和运行时字典定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM