Вывод пользовательских структур данных с помощью printf


ramok аватар

ramok - Posted on 06 Март 2007

Практически любой начинающий программист на 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++, хотя и требует не меньших усилий для реализации Ж:-)

0
Ваша оценка: Ничего

класс :))
только имхо к основной части примера относится также

#include <printf.h>

снкс подправил Ж:-)
--
Signature invent in progress 23% #.........

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.