据我所知,参数的格式说明符太少被认为是未定义的行为(格式说明符的参数太少也是未定义的行为).这适用于:
printf("%1$d %1$d", 5);
Run Code Online (Sandbox Code Playgroud)
PS使用"%1$d"
as格式说明符是POSIX添加的函数族的扩展printf
.
该n$
符号不是标准C的一部分,但POSIX的一部分.POSIX规范printf()
支持n$
表示参数的表示法.
转换可以应用于参数列表中的格式之后的第n个参数,而不是下一个未使用的参数.在这种情况下,转换说明符字符
%
(见下文)将被序列替换"%n$"
,其中n是[1,{NL_ARGMAX}]范围内的十进制整数,给出参数列表中参数的位置.此功能提供了格式字符串的定义,该字符串以适合特定语言的顺序选择参数(请参阅示例部分).格式可以包含编号的参数转换规范(即
"%n$"
和,"*m$"
)或无编号的参数转换规范(即%
和,*
),但不能同时包含两者.唯一的例外是%%
可以与"%n$"
表单混合.在格式字符串中混合编号和未编号参数规范的结果是未定义的.当使用带编号的参数规范时,指定第N个参数要求在格式字符串中指定从第一个到第(N-1)个的所有前导参数.在包含
"%n$"
转换规范形式的格式字符串中,参数列表中的编号参数可以根据需要多次从格式字符串中引用.
它要求您为每个参数提供一个参数n$
,并且格式字符串引用每个参数1..n.它并没有说你n$
每次都必须使用不同的东西.
显示的代码在POSIX系统上很好.由于它仅使用POSIX功能,因此无法将其移植到没有必要支持作为扩展的非POSIX系统.
归档时间: |
|
查看次数: |
597 次 |
最近记录: |