Печать структуры в C
Я пытаюсь напечатать struct
, который приходит как аргумент в функции, чтобы выполнить некоторую отладку.
В любом случае я мог бы печатать содержимое структуры, не зная, на что это похоже, т.е. не печатать каждое поле явно? Видишь ли, в зависимости от нагрузок разных #define
структура может выглядеть совсем по-другому, то есть может иметь или не иметь разные поля, поэтому я хотел бы найти простой способ сделать что-то вроде print_structure(my_structure)
.
Отладчик NetBeans может сделать это для меня, но, к сожалению, код работает на устройстве, на котором я не могу запустить отладчик.
Любые идеи? Полагаю, это невозможно, но, по крайней мере, может быть какой-то макрос для этого во время компиляции или что-то в этом роде?
Спасибо!
Ответы
Ответ 1
Вы всегда можете сделать шестнадцатеричный дамп структуры:
#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');
};
Ответ 2
В C нет ничего подобного RTTI, только решение (помимо шестнадцатеричного дампа, как указано выше) - это #define dump function with other #defines, т.е.
#if _DEBUG
struct { ..... }
#define STRUCT_DUMP(x) printf(.....)
#else
struct { ..... } // other version
#define STRUCT_DUMP(x) printf(.....) // other version dump
#endif