Обычно я использую простую, но настраиваемую функцию регистрации вместо макросов
Log(const char *format, ...)
{
char buffer[MAX_BUFFER_SIZE];
va_list args;
//get arguements into a list
va_start(args, format);
//printf formated arguement into a string
vsnprintf(buffer, sizeof(buffer), format, args);
va_end(args);
printf("%s", buffer);
}
так что теперь вы можете сделать
<code>Log("a[%d][%d] =\t%d\n", x, y, a[x][y])
<code>Log("if(%s) func(%d) ;", (condition) ? "true" : "False", func(foo))
добавьте некоторый тип ведения журнала (например, LOG_SCREEN, LOG_FILE) в функцию Log (), и теперь вы можете контролировать, где он регистрируется в
добавить некоторый уровень входа в систему (например, WARN, CRIT) для управления отображением, цветом и т. Д.
Конечно, есть много, много библиотек, которые уже делают все эти вещи
надеюсь, это поможет