LINUX.ORG.RU

История изменений

Исправление vbr, (текущая версия) :

Когда я делал подобную ерунду, у меня это как-то так выглядело:

LOG(a1, a2) -> log_start(); log_arg(a1); log_arg(a2); log_end();

log_arg это была _Generic функция, которая в зависимости от параметра вызывала log_arg_int и тд. Это, конечно, не совсем в тему, но вообще мне вполне хватало для моих небольших нужд, было удобно и типобезопасно. Для опций форматирования я делал доп-функцию, к примеру LOG(fmt_float(f, 2)), где функция fmt_float возвращала некую структуру struct fmt_float {float value; int precision; }, а функция log_arg имела перегрузку для этой структуры.

Исходная версия vbr, :

Когда я делал подобную ерунду, у меня это как-то так выглядело:

LOG(a1, a2) -> log_start(); log_arg(a1); log_arg(a2); log_end();

log_arg это была _Generic функция, которая в зависимости от параметра вызывала log_arg_int и тд. Это, конечно, не совсем в тему, но вообще мне вполне хватало для моих небольших нужд, было удобно и типобезопасно. Для опцией форматирования я делал доп-функцию, к примеру LOG(fmt_float(f, 2)), где функция fmt_float возвращала некую структуру struct fmt_float {float value; int precision; }, а функция log_arg имела перегрузку для этой структуры.