user-0 提问: C语言如何遍历结构体成员

回复:
user: user-1
content: 打个断点。。。运行起来跟踪。。把这结构体的指针加到addwatch里。。直接就可以看内容。。全部字段都能看。。不用打印出来看的啦。。。这个方便哇。。

user: user-1
content: 用RAD C++Builder 的话。。我有很简单的方法让你看到你这结构体的全部各个字段内容。。。^m^

user: user-2
content: 我也需要这么一个函数 在不知道（假装不知道）结构体内部成员数量和类型的情况下能够读取，要不然那么多结构体和成员，一个个输出累呀  怎么办……

user: user-3
content: 引用 30 楼 assassin5616 的回复:[quote=引用 12 楼 dailongzhen 的回复:] [quote=引用 11 楼 liuhengxiao 的回复:] 引用别人的结构体那也应该能查看到结构体的成员吧。。。 手动敲代码是能看到，但是传过来的结构体比较庞大，包含的成员类型丰富多样，结构体嵌套很多，总数据有的达到100多个甚至更多，如果全都手动敲一遍，甚是麻烦，而且效率也不高，因此想要寻找一种快捷有效的算法，不知有没有？[/quote]  这个真没有，除非你自己写一个可以读取结构体，并且自动生成输出代码的工具。有点类似一个很简单的分析器。[/quote]    引用 31 楼 dailongzhen 的回复:[quote=引用 30 楼 assassin5616 的回复:] [quote=引用 12 楼 dailongzhen 的回复:] [quote=引用 11 楼 liuhengxiao 的回复:] 引用别人的结构体那也应该能查看到结构体的成员吧。。。 手动敲代码是能看到，但是传过来的结构体比较庞大，包含的成员类型丰富多样，结构体嵌套很多，总数据有的达到100多个甚至更多，如果全都手动敲一遍，甚是麻烦，而且效率也不高，因此想要寻找一种快捷有效的算法，不知有没有？[/quote]  这个真没有，除非你自己写一个可以读取结构体，并且自动生成输出代码的工具。有点类似一个很简单的分析器。[/quote] 就是不懂该如何分析？求教[/quote]  要不就直接写代码读源文件，然后分析结构体，生成一个输出函数。想通用一点就用flex/Bison。这两样东西学习曲线挺陡的，需要花点时间

user: user-4
content: 引用 36 楼 zhao4zhong1 的回复:任何编程语言都不能自省，只用人和某些高级动物才能自省。 任何编程语言都不能自省，只有人和某些高级动物才能自省。

user: user-5
content: 它只是个工具，没有自主能力，还要有人来代劳！

user: user-6
content: 没有办法，除非编译器有相应的扩展。C#之类的话倒是可以用反射。

user: user-7
content: c++是不能动态创建新类的，只能创建类的实例  类声明的本质就是一定长度的内存进行合理规划，这个是在编译期完成的，而不是在运行态  如果要在运行时动态创建类，那么所有的工作就得自己做  也就是你自己必须创建一个类的声明进行传递，如D3D编程中就有类似的操作，在将顶点数据传给显卡的时候，就有一个声明，声明就是保存这个数据流中偏移量和类型等信息。

user: user-8
content: 引用 41 楼 akirya 的回复:没有办法，除非编译器有相应的扩展。C#之类的话倒是可以用反射。http://bbs.csdn.net/topics/390795780 请您打开这个链接，里面有一个问题待解，谢谢！

user: user-8
content: 引用 42 楼 wenpinglaoyao 的回复:[quote=引用 19 楼 ForestDB 的回复:] C不是动态语言，没有元信息（字段名、字段类型），不能反射，所以只能一行行写代码。 http://http://bbs.csdn.net/topics/390795780请大神打开这个链接，这个帖子我发了两次！无人能够回答，所以在您身上碰碰运气，叨扰了。[/quote] http://bbs.csdn.net/topics/390795780

user: user-8
content: 引用 19 楼 ForestDB 的回复:C不是动态语言，没有元信息（字段名、字段类型），不能反射，所以只能一行行写代码。 http://http://bbs.csdn.net/topics/390795780请大神打开这个链接，这个帖子我发了两次！无人能够回答，所以在您身上碰碰运气，叨扰了。

user: user-0
content: 引用 38 楼 pubuzhixia 的回复:[quote=引用 4 楼 PDD123 的回复:] 事先不知道内部有哪些成员，怎么可能正确打印？  支持。  事先不知道有哪些成员，也就意味着都不知道如何去解释这一段内存，本来就无法打印。 比如这段内存放的是0xFFFFFFFF，如果只有一个int32成员，那结果就是-2147483648；如果为2个int16成员，那结果就是-32768，-32768了。。。[/quote] 我大概了解大家的意思了

user: user-9
content: 引用 4 楼 PDD123 的回复:事先不知道内部有哪些成员，怎么可能正确打印？  支持。  事先不知道有哪些成员，也就意味着都不知道如何去解释这一段内存，本来就无法打印。 比如这段内存放的是0xFFFFFFFF，如果只有一个int32成员，那结果就是-2147483648；如果为2个int16成员，那结果就是-32768，-32768了。。。

user: user-10
content: 引用 34 楼 dailongzhen 的回复:[quote=引用 33 楼 u012222342 的回复:] [quote=引用 32 楼 dailongzhen 的回复:] [quote=引用 29 楼 u012222342 的回复:] 知道啥叫数据结构吗 ， 兄弟  懂一点[/quote] 不知道结构怎么打印，智能分析吗  ，不知道类型你怎么分析结构里有多少项呢 struct A{int a; int b; char c[20];}     占28个字节 ，如果存全int 能存7个 ，short 14个，不一样的类型，不一样的个数，类型混合更麻烦，[/quote] 那个结构体就是很多不同类型的混合，结构体嵌套。。。[/quote]  不可能的 ，

user: user-4
content: 任何编程语言都不能自省，只用人和某些高级动物才能自省。

user: user-11
content: 我认为这是不可能的，因为你不知道保存的是什么数据，都是01010101，你不知道数据类型，怎么知道是什么数据呢

user: user-0
content: 引用 33 楼 u012222342 的回复:[quote=引用 32 楼 dailongzhen 的回复:] [quote=引用 29 楼 u012222342 的回复:] 知道啥叫数据结构吗 ， 兄弟  懂一点[/quote] 不知道结构怎么打印，智能分析吗  ，不知道类型你怎么分析结构里有多少项呢 struct A{int a; int b; char c[20];}     占28个字节 ，如果存全int 能存7个 ，short 14个，不一样的类型，不一样的个数，类型混合更麻烦，[/quote] 那个结构体就是很多不同类型的混合，结构体嵌套。。。

user: user-3
content: 引用 12 楼 dailongzhen 的回复:[quote=引用 11 楼 liuhengxiao 的回复:] 引用别人的结构体那也应该能查看到结构体的成员吧。。。 手动敲代码是能看到，但是传过来的结构体比较庞大，包含的成员类型丰富多样，结构体嵌套很多，总数据有的达到100多个甚至更多，如果全都手动敲一遍，甚是麻烦，而且效率也不高，因此想要寻找一种快捷有效的算法，不知有没有？[/quote]  这个真没有，除非你自己写一个可以读取结构体，并且自动生成输出代码的工具。有点类似一个很简单的分析器。

user: user-10
content: 知道啥叫数据结构吗 ， 兄弟

user: user-12
content: 用宏定义吧，稍微能省点事。