Когда C printf()
и его семейство скомпилировано gcc
и -Wall
используется в командной строке, компилятор предупреждает об ошибочных аргументах в соответствии с используемой строкой формата. В качестве примера приведенный ниже код получит сообщение об ошибке, указывающее, что формат указан 3 аргументами, но на самом деле вы только передали два.printf() аргументы обертки, которые будут проверяться gcc
printf("%d%d%d", 1, 2);
При написании оболочки к printf()
, как вы держите эту возможность? Я бы мог подумать о форме функции или макросе. Но простые парсеры могут быть приемлемыми.
Несколько способов написания оболочки printf можно найти в stackoverflow. Два общих подхода: using vprintf with varargs и using __builtin_apply. Я пробовал эти два подхода, никто не работал.
удивительным! он отлично работает! – minghua
примечание, если 'my_printf' является членом класса: добавьте 1 к нумерации аргументов. это будет '__attribute__ ((format (printf, 3, 4)));' – minghua