Подтвердить что ты не робот

Печать структуры в C

Я пытаюсь напечатать struct, который приходит как аргумент в функции, чтобы выполнить некоторую отладку.

В любом случае я мог бы печатать содержимое структуры, не зная, на что это похоже, т.е. не печатать каждое поле явно? Видишь ли, в зависимости от нагрузок разных #define структура может выглядеть совсем по-другому, то есть может иметь или не иметь разные поля, поэтому я хотел бы найти простой способ сделать что-то вроде print_structure(my_structure).

Отладчик NetBeans может сделать это для меня, но, к сожалению, код работает на устройстве, на котором я не могу запустить отладчик.

Любые идеи? Полагаю, это невозможно, но, по крайней мере, может быть какой-то макрос для этого во время компиляции или что-то в этом роде?

Спасибо!

4b9b3361

Ответ 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