pol*_*.ph 16 c format printf gcc
我在用C编写的源代码中看到了以下行:
printf("%2$d %1$d", a, b);
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
pol*_*.ph 24
它是POSIX添加的语言的扩展(符合C11的行为应该如@chux的回答中所述).符号%2$d
表示与%d
(输出有符号整数)相同,除非它使用给定的基于1的数字格式化参数(在您的情况下,它是第二个参数b
).
因此,当您运行以下代码时:
#include <stdio.h>
int main() {
int a = 3, b = 2;
printf("%2$d %1$d", a, b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你会得到2 3
标准输出.
更多信息可以在printf手册页上找到.
chu*_*ica 11
根据C规范C11dr 7.21.6.1
作为打印格式的一部分,首先%
在"%2$d %1$d"
引入了一个指令.该指令可能有各种标志,宽度,精度,长度修饰符,最后还有转换说明符.在这种情况下2
是宽度.下一个字符$
既不是精度,长度修饰符也不是转换说明符.因此,由于转换规范无效,
......行为未定义. C11dr 7.21.6.1 9
C规范讨论了未来的图书馆方向.可以在将来添加小写字母,并且可以在扩展中使用其他字符.当然$
不是小写字母,所以这对未来有好处.它当然适合"其他角色"角色,因为$
它甚至不是C字符集的一部分.
在各种*nix实现中,$
使用Linux程序员手册PRINTF(3)中的描述.的$
,与前面的整数沿着限定了宽度的参数索引.