在C语言中检查结构体中是否存在元素

3
如果我有一个名为“apple”的结构体,那么是否有一种方法可以检查结构体中是否存在特定的元素,比如“color”?
struct apple A{
char color;
int pack;
}

使用此函数的可能是了解该结构体内部情况而非其名称的函数。

在什么情况下这是可行的? - Oliver Charlesworth
3
你在谈论反射。我认为C语言不支持这一点。 - smac89
@Smac89,你可以给我们举一个反射的例子吗?还有哪些编程语言支持它? - Mehdi Karamosly
1
@Smac89:不一定。C++中也可以使用类似的方法SFINAE - user405725
只是对这种情况的评论...在网络套接字编程中,常见的情况是在套接字地址中初始化sin_len结构字段(如果存在)。目前我看到的用法是使用自动配置脚本设置宏,如果结构字段存在,则使用#ifdef检查struct sockaddr_in中是否存在sin_len的情况。如果能够在不依赖于像自动配置方法这样的两遍处理的情况下获取该结构字段的条件初始化,那将是很好的。 - Jack Brennen
2个回答

4

在C语言中唯一的方法是使用你感兴趣的特定字段。如果程序编译成功,则它存在。如果没有,则要么不存在,要么出现了其他错误。


流程是这样的,当读取请求到达读取接口时,它才会与属性列表进行映射并尝试提取属性。这是因为读取接口处理不同类型的结构体,所以更多地涉及运行时问题... - Ginu Jacob
1
当出现运行时问题时,您可以使用元信息来确定所读取数据的类型。如果没有这些元信息,即使在理论上也无法解决该问题,因为结构仅是编译时概念,在运行时甚至不存在。 - user405725

1

C语言不支持您所需的功能,而且需要它似乎表明设计存在问题。如果您正在解释流,则流中应该有一个标识符,在流中早期指示接下来的结构。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接