История изменений
Исправление Gyros, (текущая версия) :
Исправил как сказал firkax в my_printf
...
case 'q':
{
POINT2 p = va_arg(args, POINT2);
printf("(%3.3f, %3.3f)", p.X, p.Y);
break;
}
...
Теперь просто
/*
#define UNIVERS_PRINT(x)\
_Generic( (x),\
struct POINT2 : printf_pt2, \
default : my_printf \
)(PFMT(x), (x))
*/
#define UNIVERS_PRINT(x) my_printf(PFMT(x), (x))
и TO_DBL и printf_pt2 не нужны.
Резюмирую.
Есть два способа универсального вывода (одним PRINT(x) для x разных типов) в C:
-
через проксирующие ф-ции, как говорил LINUX-ORG-RU;
-
через свой самописный my_printf с новыми символами форматирования для своих структур.
Других способов это делать в C нет.
Исходная версия Gyros, :
Исправил как сказал firkax в my_printf
...
case 'q':
{
POINT2 p = va_arg(args, POINT2);
printf("(%3.3f, %3.3f)", p.X, p.Y);
break;
}
...
Теперь просто
/*
#define UNIVERS_PRINT(x)\
_Generic( (x),\
struct POINT2 : printf_pt2, \
default : my_printf \
)(PFMT(x), (x))
*/
#define UNIVERS_PRINT(x) my_printf(PFMT(x), (x))
и TO_DBL не нужен.
Резюмирую.
Есть два способа универсального вывода (одним PRINT(x) для x разных типов) в C:
-
через проксирующие ф-ции, как говорил LINUX-ORG-RU;
-
через свой самописный my_printf с новыми символами форматирования для своих структур.
Других способов это делать в C нет.