是否可以确定库中结构(C语言)中的元素(名称和数据类型)?如果是的话,怎么用C语言呢?如果C语言不支持它,是否可以通过其他技巧获取结构元素或者是否有任何工具?
答案 0 :(得分:5)
您的意思是在编程时查找,还是在运行时动态查找?
对于前者,当然。只需找到您所包含的.h文件,您就会在那里找到包含所有字段的结构定义。
对于后者,不,这是不可能的。 C将结构编译为机器代码,使所有这些信息都丢失。例如,如果您有一个结构{int x, float y, int z}
,并且您有一些代码
a = mystruct.y
在机器代码中,所有剩下的就像找到mystruct
的指针,向它添加4(int的大小),从那里读取4个字节,然后做一些浮点运算它。这些结构字段的名称和类型都不可访问,因此,无法在运行时找到它们。
答案 1 :(得分:3)
不,这是不可能的。 C没有内置的反射式支持。
答案 2 :(得分:0)
如果通过“确定结构的元素”意味着“以编程方式获得该结构类型的声明”,那么我不相信它是可能的 - 至少不是可移植的。与C ++或Java等更现代的语言相反,C不会将类型信息保存在实际程序可用的表单中。
编辑:
澄清我对“不可移植”不可能的评论:
很可能会有一些编译器+调试格式组合将必要的信息嵌入到它生成的目标文件中,尽管我不能说我知道的一个。然后,假设您可以让程序打开自己的可执行文件并解析调试信息。但这是一种繁琐而脆弱的方法,充其量......
为什么你需要这样做?