Таким образом, вы можете передать весь список аргументов в макрос и передать его функции, которая принимает переменное число аргументов.
Я бы поставил на что угодно, что определение этого макроса:
#if DEBUG /* or something like it */
#define KdPrint(args) (printf args)
#else
#define KdPrint(args) /* empty */
#endif
или аналогично какой-либо другой функции, которая работает так же, как printf.
Если бы она была определена как printf (args), то вы могли бы передать только один строковый аргумент, посколькуАргумент макроса не может содержать запятую, которая не находится во вложенных скобках.