我有很多程序都定义了structs
,每一次我都要创建一个函数来打印成员,例如,
typedef struct {
char name[128];
char address[1024];
int zip;
} myStruct;
void printMyStruct(myStruct myPeople) {
printf("%s\n",myPeople.name);
printf("%s\n",myPeople.address);
printf("%d\n",myPeople.zip);
}
int main()
{
myStruct myPeople={"myName" , "10 myStreet", 11111};
printMyStruct(myPeople);
}
我知道C语言不支持反射,所以,我为我定义的每个结构体编写了这些打印函数。
但是,我想知道是否存在自动生成这些打印函数的技巧。我会理解我必须修改这些函数。但是,如果部分工作是自动完成的,那就太好了。(这个例子很简单,有时结构体是嵌套的,或者我有结构体数组,或者一些字段是指针,...)
2条答案
按热度按时间k5hmc34c1#
当然,你可以打印结构体,但是会有很多不可读的输出:
但问题是,它将打印结构体,因为它是在内存中表示。所以4字节(32位)整数1将表示为4字节,而不是字符'1'。
由于指针的工作方式,您无法判断成员是指针还是非指针。
另一个问题是结构有填充来帮助对齐,以及更好/有效地使用内存。所以你会看到中间有很多0x 00。
记住C是一种编译语言。
7cwmlq892#
让我们考虑使用https://copilot.github.com/,它很棒,这就是我在copilot中所拥有