我有一个 printf 的自定义实现,我在学校项目中使用它。
希望有与 printf 相同的警告,我使用 __attribute__((format (printf ...))
。效果很好,但是使用 -Wall -Wextra -Werror -std=c11 -pedantic-errors
,我收到错误 ISO C does not support %n$ operand number formats
在海湾合作委员会 7.2.0 上。 (我的实现支持该格式)。
在 clang 上,如果我使用 std=c11
,它不会发出警告。 ,但与std=c99
有关。
该格式是 c11 规范的一部分(我认为是 clang 行为)还是仅是 Singe Unix 规范(这就是我的手册页所说的)?如果是这样,我该如何使用它?在 this page ,我找不到它作为 std
的选项.
我宁愿不禁用任何警告,因为它们非常有用并且可以捕获很多内容。但是有没有办法在格式字符串中允许该格式,或者仅为我的函数指定?
非常感谢。
P.S: 我使用 printf 的自定义实现,因为在我的学校项目中,我们必须只使用特定允许的函数(基本上,系统 api,如 malloc
、 free
、 read
等),或者我们已经完成的函数我们自己。
编辑:供引用,格式 %n$
,与 n
作为非零数字的数字字符串,允许访问提供给 printf 的变量参数列表中该索引处的参数(从 1 开始)。 (并且可用于转换本身或用于 *
操作数的精度或字段宽度)。
最佳答案
您可以在属性中使用 gnu_printf
而不是 printf
来建模更接近 POSIX 的 printf
的行为。
关于c - 允许自定义 printf 的 %n$ 操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48285280/