繁体   English   中英

如何打印结构的所有字段名

[英]How do I print all the fieldnames of a struct

如何打印结构的所有字段名,这些结构的子结构中也包含逗号分隔的子结构?

typedef struct logTimestamp_s{
    unsigned short lower;
    unsigned short tsLow;
    unsigned int tsHigh;
} logTimestamp;

typedef struct logHeader_s{
    unsigned short length;
    unsigned short code;
    logTimestamp ts;
} logHeader;

typedef struct __attribute__ ((__packed__)){
    logHeader   hdr;                //12
    unsigned int res1;              //16       unknown 4 bytes.
    unsigned char id;               //17        /* sub packet id */
    unsigned char ver;              //18        /* sub packet version */
    unsigned short size;            //20        /* sub packet size */
    unsigned int res2;              //24       unknown 4 bytes.
}log11AB;

对于ex,我正在寻找一种获取打印输出的方法,例如:

"length, code, lower, tsLow, tsHigh, res1, id, ver, size, res2"

谢谢!

恐怕您无法在简单的C程序中做到这一点。 字段名称在运行时不可用-只有编译器可以看到这些名称。 如果您不需要在运行时执行此操作,则可以考虑使用类似libclang来解析源并提取所需的信息。

另一种选择是使用预处理器宏来创建您的结构,从而提供打印/反射的可能性。 以下SO答案提供了概念证明

首先,不要嘲笑我的建议,但是我确实做到了。

您仅需在调试时打印该结构,调试器即可获得所有信息。 通常,该结构以树视图的形式显示:根目录没有数据,要查看成员的数据,请展开根目录。 由于我懒得将它们全部展开(不停滚动查看它们),因此,我抓住每个成员的值并将它们(以逗号分隔)汇总为根的数据(非常宽的视图)。

当然,您没有喜欢的调试器的源代码! (我为ollydbg编写了我的非常原始的插件)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM