[英]Allowing %n$ operand for custom printf
我在学校项目中使用了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上ISO C does not support %n$ operand number formats
(我的实现支持该格式)。在clang上,如果我使用std=c11
不会发出警告,但对std=c99
发出警告。
该格式是c11规范的一部分(让我想一下是clang行为)还是仅Singe Unix规范(这就是我的手册页所说的)? 如果可以,该如何使用? 在此页面中 ,我找不到它作为std
的选项。
我宁愿不禁用任何警告,因为它们非常有用并且广受欢迎。 但是有没有办法允许格式字符串中的格式,或者只为我的函数指定?
非常感谢。
PS:我使用printf的自定义实现,因为在我的学校项目中,我们必须仅使用特定的允许功能(基本上是系统api,如malloc
, free
, read
等),或者我们自己完成的功能。
编辑:作为参考,格式为%n$
,其中n
为非零数字的数字字符串,允许访问给定printf的变量参数列表中该索引处的参数(从1开始)。 (并且可用于转换本身,或用于带有*
操作数的精度或字段宽度)。
您可以在属性中使用gnu_printf
而不是printf
来模拟更接近POSIX的printf
的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.