c - 循环遍历 C 结构中的元素以提取单个元素的值和数据类型
问题描述
我有一个要求,我在 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
出现时都放置了一个类型字符串,您可以使用一些字符串比较函数来确定每种类型的基础。
推荐阅读
- javascript - 需要高级正则表达式帮助
- react-native - 有没有办法在原生 iOS 代码中调用 RCT_EXPORT_METHOD
- c - 用户输入仅限于奇数没有?代码有什么问题?
- excel - Excel 中的 XLOOKUP 函数
- django - 在文本区域显示文本 Django
- dashboard - 有没有办法只看到不编辑用户 cognos 仪表板?
- vba - 更改链接表源访问 2016
- angular - 带有多部分文件和其他参数的 Angular POST 请求
- kubernetes - 在 kubernetes 环境上部署时出现 Spire-agent 问题
- firebase - 如果 ios 中未安装应用程序,动态链接不会重定向到应用程序商店