0

我有一个 printf 的自定义实现,我在学校项目中使用它。希望得到与 printf 相同的警告,我使用__attribute__((format (printf ...)). 这工作正常,但使用-Wall -Wextra -Werror -std=c11 -pedantic-errors,我得到ISO C does not support %n$ operand number formatsgcc 7.2.0 上的错误。(我的实现支持该格式)。在铿锵声中,如果我使用它不会发出警告std=c11,但会发出警告std=c99

该格式是 c11 规范的一部分(就像我认为的 clang 行为)还是只是 Singe Unix 规范(这就是我的手册页所说的)?如果是这样,我该如何使用它?在此页面中,我找不到它作为选项std

我宁愿不禁用任何警告,因为它们非常有用并且捕获了很多。但是有没有办法在格式字符串中允许这种格式,或者只为我的函数指定?

非常感谢。

PS:我使用 printf 的自定义实现,因为在我的学校项目中,我们必须只使用特定允许的功能(基本上,系统 api,如,malloc等),或者我们自己完成的那个。freeread

编辑:作为参考,格式%n$n非零数字的数字字符串,允许访问提供给 printf 的变量参数列表中该索引处的参数(从 1 开始)。(并且可以用于转换本身或用于*操作数的精度或字段宽度)。

4

1 回答 1

0

您可以在属性中使用gnu_printf而不是对printf更接近 POSIX' 的行为进行建模printf

于 2018-01-16T17:23:58.523 回答