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)));
当 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)));