我有一个要求,我要在C中使用大型结构,其中包含大约30多个不同数据类型的不同元素:
typedef struct {
type1 element1;
type2 element2;
type3 element3;
type2 element4[10];
...
typeN elementN;
} my_messg_struct;
这基本上是通过串行协议发送的消息中的一组元素。该消息具有上述结构中捕获的数据类型不同的各种元素。同样,我还有很多其他信息。现在,我必须编写一个通用函数,该函数负责读取这些消息结构,并循环遍历每个元素,以读取元素的值和数据类型,然后通过串行端口进行传输。我需要先读取数据类型,因为在我的情况下,各种数据类型的传输顺序是不同的。
因此,基本上,我只是想知道如何在C中循环遍历结构的元素,这样我才能读取结构中存在的每个元素的值和数据类型?
您可以尝试使用X宏,但是产生的源代码可读性令人怀疑:
#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
情况下都放置了一个类型字符串,您可以使用一些字符串比较功能来确定每种类型的基础。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句