我想获得有关C样式结构的帮助。我对C没有太多的了解,所以我对基础知识不熟悉。
现在,我有一个结构(outerStruct),它具有其他结构作为成员(innerStruct1,innerStruct2 ...)。我需要做的是获取innerStruct1,innerStruct2的成员变量的值。...
我仅有的信息是指向externalStruct的指针和一个数据结构,该数据结构具有每个innerStructs的成员变量的所有可能的变量类型。请注意,所有变量名称都只是变量类型 +“ _val”,因此,如果我可以键入成员变量的类型,则也可以获取变量名称。
我需要获取有关innerStructs成员的信息,并将其解析为文本文件,然后会显示变量名称和变量值。
是否可以在不使用变量名的情况下获取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我想从嵌套结构中获取内部结构的值,而不使用实际的变量名。
(此外,此处的代码仅显示结构的布局。将使用正确的语法。)
答案 0 :(得分:0)
在C中,您必须手动遍历各个结构的成员。但是,即使您希望保持结构内部的“私有”,也可以仅通过公开结构标记名称来提供公共功能以打印该功能。
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");
}
有了足够的脚手架,您也许可以机械地生成这些打印功能。例如,可能需要为您的结构编写解析器。