我有一个 printf 的自定义实现,我在学校项目中使用它。希望得到与 printf 相同的警告,我使用__attribute__((format (printf ...))
. 这工作正常,但使用-Wall -Wextra -Werror -std=c11 -pedantic-errors
,我得到ISO C does not support %n$ operand number formats
gcc 7.2.0 上的错误。(我的实现支持该格式)。在铿锵声中,如果我使用它不会发出警告std=c11
,但会发出警告std=c99
。
该格式是 c11 规范的一部分(就像我认为的 clang 行为)还是只是 Singe Unix 规范(这就是我的手册页所说的)?如果是这样,我该如何使用它?在此页面中,我找不到它作为选项std
。
我宁愿不禁用任何警告,因为它们非常有用并且捕获了很多。但是有没有办法在格式字符串中允许这种格式,或者只为我的函数指定?
非常感谢。
PS:我使用 printf 的自定义实现,因为在我的学校项目中,我们必须只使用特定允许的功能(基本上,系统 api,如,malloc
等),或者我们自己完成的那个。free
read
编辑:作为参考,格式%n$
是n
非零数字的数字字符串,允许访问提供给 printf 的变量参数列表中该索引处的参数(从 1 开始)。(并且可以用于转换本身或用于*
操作数的精度或字段宽度)。