允许%n $操作数用于自定义printf

时间:2018-01-16 15:59:54

标签: c compiler-warnings c11 standards-compliance sus

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

这种格式是c11规范的一部分(我认为是clang行为)还是只有Singe Unix规范(这是我的手册页中所说的)?如果是这样,我该如何使用它?在this page中,我无法将其作为std的选项。

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

非常感谢。

PS:我使用printf的自定义实现,因为在我的学校项目中,我们只能使用特定的允许函数(基本上,系统api,如mallocfreeread等,或者我们自己做的那个。

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

1 个答案:

答案 0 :(得分:0)

您可以在属性中使用gnu_printf代替printf来建模更接近POSIX'的行为。 printf