当Cprintf()
它的家族是由gcc
and -Wall
在命令行上使用时,编译器会根据正在使用的格式字符串警告错误放置的参数。例如,下面的代码会收到一条错误消息,指出格式指定了 3 个参数,但实际上您只传递了两个。
printf("%d%d%d", 1, 2);
当写一个包装器到printf()
,如何保持这种能力?我能想到的是函数或宏的形式。但简单的解析器也是可以接受的。
可以在 stackoverflow 上找到编写 printf 包装器的几种方法。两种常见的方法是将 vprintf 与 varargs 一起使用, and 使用 __builtin_apply。我已经尝试过这两种方法,但没有任何效果。
你可以使用海湾合作委员会format函数属性,以便根据格式字符串检查参数。
extern int my_printf (void *my_object, const char *my_format, ...)
__attribute__ ((format (printf, 2, 3)));
检查 gcc 手册《6.31.1 常用功能属性》
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)