获取有关 C 类型结构成员的信息(类型、值等)
Getting information (types, values...etc) on members of C type struct
我想获得一些关于 C 风格结构的帮助。我对C没有太多了解,所以我不熟悉基础知识。
现在,我有一个结构 (outerStruct),它具有其他结构作为成员(innerStruct1、innerStruct2...)。我需要做的是获取 innerStruct1、innerStruct2 的成员变量的值....
我拥有的唯一信息是指向 outerStruct 的指针和一个数据结构,该数据结构具有每个 innerStructs 的成员变量的所有可能变量类型。请注意,所有变量名称只是变量类型
+ "_val" 所以如果我可以输入成员变量的类型,我也可以得到变量名。
我需要获取有关 innerStructs 成员的信息并将它们解析为文本文件,s.t 变量名和变量值会显示出来。
不使用变量名可以获取innerStruct的成员变量吗?由于 C 玩内存分配,也许这是可能的?如果这不可能,我可以获得哪些可能的信息?
变量名和类型的容器很大,所以如果我使用所有值来检索信息,它会做太多空检查,并且时间将与容器的大小成线性关系。相反,我想知道我是否可以利用命名约定并使代码更高效。
struct outerStruct {
innerStruct1 innerStruct1_val;
innerStruct2 innerStruct2_val;
}
struct innerStruct1 {
int int_val = 5;
char char_val = 'a';
}
struct innerStruct2 {
float float_val = 4.0;
double double_val = 5.0;
}
预期输出(打印到屏幕):
"innerStruct1_val : int_val = 5, char_val = 'a' || innerStruct2_val : float_val = 4.0, double_val = 5.0"
TL;DR 我想在不使用实际变量名的情况下从嵌套结构中获取内部结构的值。
(此外,此处的代码仅显示结构布局。将使用正确的语法。)
在 C 中,您必须手动遍历各个结构的成员。但是,即使你想保留结构内部 "private",只通过使结构标记名称 public,你可以提供一个 public 函数来打印函数。
struct outerStruct;
void print_outerStruct(const struct outerStruct *);
对于内部结构也是如此。
由于您必须在某个地方定义完整的外部结构才能使用它,因此该地方也将是提供其打印功能实现的地方。
struct outerStruct {
struct innerStruct1 innerStruct1_val;
struct innerStruct2 innerStruct2_val;
};
void print_outerStruct (const struct outerStruct *os) {
printf("outerStruct (%p) { ", os);
printf("%s: ", "innerStruct1_val");
print_innerStruct1(&os->innerStruct1_val);
printf("%s: ", "innerStruct2_val");
print_innerStruct2(&os->innerStruct2_val);
printf(" }\n");
}
有了足够的脚手架,您也许能够机械地生成这些打印函数。例如,它可能需要为您的结构编写解析器。
我想获得一些关于 C 风格结构的帮助。我对C没有太多了解,所以我不熟悉基础知识。
现在,我有一个结构 (outerStruct),它具有其他结构作为成员(innerStruct1、innerStruct2...)。我需要做的是获取 innerStruct1、innerStruct2 的成员变量的值....
我拥有的唯一信息是指向 outerStruct 的指针和一个数据结构,该数据结构具有每个 innerStructs 的成员变量的所有可能变量类型。请注意,所有变量名称只是变量类型 + "_val" 所以如果我可以输入成员变量的类型,我也可以得到变量名。
我需要获取有关 innerStructs 成员的信息并将它们解析为文本文件,s.t 变量名和变量值会显示出来。
不使用变量名可以获取innerStruct的成员变量吗?由于 C 玩内存分配,也许这是可能的?如果这不可能,我可以获得哪些可能的信息?
变量名和类型的容器很大,所以如果我使用所有值来检索信息,它会做太多空检查,并且时间将与容器的大小成线性关系。相反,我想知道我是否可以利用命名约定并使代码更高效。
struct outerStruct {
innerStruct1 innerStruct1_val;
innerStruct2 innerStruct2_val;
}
struct innerStruct1 {
int int_val = 5;
char char_val = 'a';
}
struct innerStruct2 {
float float_val = 4.0;
double double_val = 5.0;
}
预期输出(打印到屏幕):
"innerStruct1_val : int_val = 5, char_val = 'a' || innerStruct2_val : float_val = 4.0, double_val = 5.0"
TL;DR 我想在不使用实际变量名的情况下从嵌套结构中获取内部结构的值。
(此外,此处的代码仅显示结构布局。将使用正确的语法。)
在 C 中,您必须手动遍历各个结构的成员。但是,即使你想保留结构内部 "private",只通过使结构标记名称 public,你可以提供一个 public 函数来打印函数。
struct outerStruct;
void print_outerStruct(const struct outerStruct *);
对于内部结构也是如此。
由于您必须在某个地方定义完整的外部结构才能使用它,因此该地方也将是提供其打印功能实现的地方。
struct outerStruct {
struct innerStruct1 innerStruct1_val;
struct innerStruct2 innerStruct2_val;
};
void print_outerStruct (const struct outerStruct *os) {
printf("outerStruct (%p) { ", os);
printf("%s: ", "innerStruct1_val");
print_innerStruct1(&os->innerStruct1_val);
printf("%s: ", "innerStruct2_val");
print_innerStruct2(&os->innerStruct2_val);
printf(" }\n");
}
有了足够的脚手架,您也许能够机械地生成这些打印函数。例如,它可能需要为您的结构编写解析器。