我正在尝试打印一个struct
作为函数中的参数,以便进行一些调试。
无论如何我可以在不知道它的外观的情况下打印结构的内容,即不显式打印每个字段?你看,根据不同#define
的负载,结构可能看起来非常不同,即可能有或没有不同的字段,所以我想找到一种简单的方法来做print_structure(my_structure)
之类的事情。
NetBeans的调试器可以为我做到这一点,但不幸的是,代码在我无法运行调试器的设备上运行。
有什么想法吗?我想这是不可能的,但至少在编译时可能会有一些宏来做这件事吗?
谢谢!
答案 0 :(得分:24)
您始终可以对结构进行十六进制转储:
#define PRINT_OPAQUE_STRUCT(p) print_mem((p), sizeof(*(p)))
void print_mem(void const *vp, size_t n)
{
unsigned char const *p = vp;
for (size_t i=0; i<n; i++)
printf("%02x\n", p[i]);
putchar('\n');
};
答案 1 :(得分:1)
C中没有RTTI,只有解决方案(除了上面的十六进制转储)是#define转储功能和其他#defines,即。
#if _DEBUG
struct { ..... }
#define STRUCT_DUMP(x) printf(.....)
#else
struct { ..... } // other version
#define STRUCT_DUMP(x) printf(.....) // other version dump
#endif