c - 允许自定义 printf 的 %n$ 操作数

标签 c compiler-warnings c11 standards-compliance sus

我有一个 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,如 mallocfreeread 等),或者我们已经完成的函数我们自己。

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

最佳答案

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

关于c - 允许自定义 printf 的 %n$ 操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48285280/

相关文章:

c - 是否可以编写一个函数,该函数返回一个指向与其参数中的函数不同的函数的指针?

c - 类型 "char *"和类型 "char[10]"之间的区别

c++ - 警告 : zero as null pointer constant while comparing iterators

c - 为什么调用带有字符串文字参数的纯函数未优化为常量值?

c - 从输入中获取内存地址。 C

c - 子进程之间的管道

c++ - 一组警告作为错误 g++

c++ - -Wstrict-函数定义中的溢出警告

c - thrd_join 的返回值与其 res 参数的区别?

c - 第 5.1.2.3 节第 4 段(在 n1570.pdf 中)对空操作意味着什么?