哪个编译器不支持 printf 标志中“%#x”的样式?

问题描述 投票:0回答:4

我知道 %#x 具有与 0x%x 相同的效果,并且它符合 POSIX 标准。但人们提到有些编译器不支持它。是这样吗,有例子吗?

c printf posix
4个回答
5
投票

除了一些损坏的嵌入式系统 C 库之外,

#
修饰符应该得到普遍支持。然而
%#x
0x%x
并不相同。它们对于值 0 产生不同的结果,并且
#
修饰符将始终以与十六进制数字相同的情况打印
x
(例如
%#x
给出
0xa
%#X
给出
0XA
)。
0x%X
可以让你拥有小写的
x
和大写的十六进制数字(视觉上更令人愉悦,至少对我来说)。因此,我发现
#
修饰符在实践中很少有用。


2
投票

%#x
是 C89、C99 和 C11 中
printf
格式字符串的有效转换规范。


2
投票

#
标志字符不是来自 POSIX,而是来自 C 标准(第 7.21.6.1 节)。 如果编译器或库不支持它,那么它就不是 C 编译器/标准库。


1
投票

根据

C
规范,这完全有效 -
7.21.6.1 The fprintf function
- 点
#6

#

结果被转换为“替代形式”。对于 o 转换,它增加 精度,当且仅当必要时,强制结果的第一个数字为 零(如果值和精度均为 0,则打印单个 0)。对于 x(或 X) 转换时,非零结果的前缀为 0x(或 0X)。对于 a、A、e、E、f、F、g, 和 G 转换,始终转换浮点数的结果 包含小数点字符,即使其后没有数字。 (通常,一个 仅当数字为小数点字符时,这些转换的结果中才会出现小数点字符 )对于 g 和 G 转换,尾随零不会从 结果。对于其他转换,行为未定义。

© www.soinside.com 2019 - 2024. All rights reserved.