我遇到过一些遗留代码,它们具有以下类型的行:
有没有人看过像Fd或Ff这样的修饰符?如果是这样,那是什么意思?
我似乎无法找到有关它的任何信息。代码编译并运行正常。
答案 0 :(得分:6)
C代表fscanf
函数:
(C99 1 ,7.19.6.2p14)转换说明符A,E,F,G和X也有效,其行为分别与a,e,f,g相同和x。
因此,在%Fd
中,转化规范为%F
,相当于%f
。请注意,d
不是转换规范的一部分。
例如(fprintf
个函数%F
也与%f
相同):
printf("%fd\n", 3.141592);
将打印:
3.141592d
<小时/> <子> 1. C89 / C90无法识别
F
转换说明符。例如,对于fscanf
,7.9.6.2中相应的C90段落说:转换说明符E,G和X也是有效的,其行为与e,g和x相同
子>
答案 1 :(得分:1)
正如ouah所指出的,这些与他们的小写对应物相同。这是为什么?用于与printf转换说明符对称。此处%x
和%X
会写下deadbeef
和DEADBEEF
等小写或大写数字。对称性允许对scanf
输入使用相同的格式字符串,并使用printf
输出。
#define FMT "%F\n"
sscanf (str, FMT, &value);
printf (FMT, value);
答案 2 :(得分:1)
%F
是POSIX(和C99)扩展名。
http://pubs.opengroup.org/onlinepubs/007904975/functions/scanf.html
“转换说明符A,E,F,G和X也是有效的,分别等于a,e,f,g和x。”