Gcc 抑制自定义printf实现的格式和额外参数警告

Gcc 抑制自定义printf实现的格式和额外参数警告,gcc,printf,format-specifiers,Gcc,Printf,Format Specifiers,我已经为嵌入式环境编写了一个定制printf实现。在这项工作中,我还添加了一些用于打印唯一类型和时间戳的额外说明符,其中包括: printf("[%T] time\n"); 这可能是唯一的,因为它不接受任何参数,而是在解析器中具有唯一的处理。尽管这可以通过使用宏在需要时始终传递虚假数据来轻松解决。或者,如果它引起了太多的麻烦,我可以使它更独特,这样它就不会出现与其他接受参数的说明符相同的情况 我实现的所有其他自定义类型都像往常一样使用参数。我遇到的唯一问题是编译器的警告:

我已经为嵌入式环境编写了一个定制printf实现。在这项工作中,我还添加了一些用于打印唯一类型和时间戳的额外说明符,其中包括:

printf("[%T] time\n");
这可能是唯一的,因为它不接受任何参数,而是在解析器中具有唯一的处理。尽管这可以通过使用宏在需要时始终传递虚假数据来轻松解决。或者,如果它引起了太多的麻烦,我可以使它更独特,这样它就不会出现与其他接受参数的说明符相同的情况

我实现的所有其他自定义类型都像往常一样使用参数。我遇到的唯一问题是编译器的警告:

test.c:130:32: warning: unknown conversion type character ‘v’ in format [-Wformat=]
     printf("%v\n", type);
              ^
test.c:130:16: error: too many arguments for format [-Werror=format-extra-args]
     printf("%v\n", type);
            ^~~~~~~~~~~~~~~~~~~~
可以通过添加
-Wno-format额外的args-Wno-format
编译器参数来抑制这些警告,我现在这样做了。但这可能会掩盖真正的错误,比如在需要指针的地方传递整数,或者合法地没有为给定的说明符列表提供足够的参数


是否可以将新的语义检查添加到
printf
-样式的函数中?

无法添加新检查,这是一个开放的窗口。@ssbssa感谢您的链接。最初的报告显然要追溯到2011年,所以我怀疑在不久的将来我们是否会看到任何真正的支持。对于如何实现这一特性存在着争论。我不明白为什么不能对一些只指定为
%v
的内容提供基本支持,例如
无效*
。这看起来很简单,但我知道GCC代码库很复杂。类似的东西也在bug报告中提出过,请参见注释和注释。