gpt4 book ai didi

c - 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

转载 作者:行者123 更新时间:2023-12-04 01:53:27 24 4
gpt4 key购买 nike

我有一个要求,我在 C 中有一个大结构,由大约 30 多个不同数据类型的不同元素组成:

typedef struct {
type1 element1;
type2 element2;
type3 element3;
type2 element4[10];
...
typeN elementN;
} my_messg_struct;

这基本上是通过串行协议(protocol)发送的消息中的一组元素。此消息具有在上述结构中捕获的不同数据类型的各种元素。同样,我还有很多其他信息。现在我必须编写一个通用函数,它负责读取这些消息结构并循环遍历读取元素的值和数据类型的每个元素,然后通过串行端口进行传输。我需要先读取数据类型,因为在我的情况下,各种数据类型的传输顺序不同。

所以,基本上,我只是想知道如何在 C 中循环遍历结构的元素,以便我可以读取结构中存在的每个元素的值和数据类型?

最佳答案

您可以尝试使用 X macros ,但生成的源代码可读性值得怀疑:

 #include <stdio.h>

#define LIST_OF_VARIABLES \
XI(int, value1) \
XD(double, value2) \
XU(unsigned, value3)


#define XI(int, name) int name;
#define XD(double, name) double name;
#define XU(unsigned, name) unsigned name;
typedef struct A {
LIST_OF_VARIABLES
} A;
#undef XI
#undef XD
#undef XU

void print_variables(struct A a)
{
#define XI(type, name) printf("%s = %d\n", #type, a.name);
#define XD(type, name) printf("%s = %f\n", #type, a.name);
#define XU(type, name) printf("%s = %u\n", #type, a.name);
LIST_OF_VARIABLES
#undef XI
#undef XD
#undef XU
}

int main(void) {
A a = {
.value1 = 10,
.value2 = 0.5,
.value3 = 1,
};
print_variables(a);
return 0;
}

现在您已经在每个 #type 上放置了一个类型字符串。发生时,您可以使用一些字符串比较函数来确定每种类型的基础。

关于c - 循环遍历 C 结构中的元素以提取单个元素的值和数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51875995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com