Вывод пользовательских структур данных с помощью printf
Практически любой начинающий программист на C++ знает о такой возможности стандартных классов ввода/вывода C++ cin/cout как вывод/вывод пользовательских типов данных. Например если у вас есть ваш класс Widget то можно релизовать красивый вывод данных объекта этого класса:
Widget mywidget("mywidget");
cout << mywidget;
Откройте любой учебник по С++ на главе по перегрузке операторов и там доходчиво
все объясняют.
Но далеко не каждый профессиональный программист знает о примерно такой же возможности в C. В GNU libc имеется API для регистрации пользовательских форматов данных для printf.
В документации glibc описана эта замечательная возможность . Там же дан толковый пример .
Позволю себе процитировать основную часть примера:
#include <printf.h>
/* Задаем пользовательский тип данных. */
Widget mywidget;
mywidget.name = "mywidget";
/* Регистрируем фунцию вывода для структуры Widget. */
register_printf_function ('W', print_widget, print_widget_arginfo);
/* Печатаем Widget с помощью printf. */
printf ("|%W|\n", &mywidget);
printf ("|%35W|\n", &mywidget);
printf ("|%-35W|\n", &mywidget);
может выводить например:
|<Widget 0xffeffb7c: mywidget>| | <Widget 0xffeffb7c: mywidget>| |<Widget 0xffeffb7c: mywidget> |
Код получается такой же красивый как в C++, хотя и требует не меньших усилий для реализации Ж:-)
- 2585 просмотров
Страница для печати


класс :))
только имхо к основной части примера относится также
#include <printf.h>
снкс подправил Ж:-)
--
Signature invent in progress 23% #.........
Отправить комментарий