gcc 检查的 printf() 包装器参数

printf() wrapper arguments to be checked by gcc

当 C printf() 及其家族由 gcc 编译并且在命令行上使用 -Wall 时,编译器会根据正在编译的格式字符串警告错误放置的参数用过的。例如,下面的代码会收到一条错误消息,指出格式指定了 3 个参数,但实际上您只传入了两个。

printf("%d%d%d", 1, 2);

在为 printf() 编写包装器时,如何保持这种能力?我能想到的是一种函数形式或宏。但简单的解析器也可以接受。

可以在 Whosebug 上找到一些编写 printf 包装器的方法。两种常见的方法是 using vprintf with varargs, and using __builtin_apply。我已经尝试了这两种方法,none 奏效了。

您可以使用 gcc format 函数属性来根据格式字符串检查参数。

extern int my_printf (void *my_object, const char *my_format, ...)
           __attribute__ ((format (printf, 2, 3)));

查看gcc手册"6.31.1 Common Function Attributes"