次のタイプの行を持つレガシーコードに出くわしました。
sscanf(szBuff、 "%Fd%Ff%Fd%Ff"
FdやFfのような修飾子を見た人はいますか?もしそうなら、それはどういう意味ですか?
情報が見つからないようです。コードはコンパイルされ、正常に実行されます。
次のタイプの行を持つレガシーコードに出くわしました。
sscanf(szBuff、 "%Fd%Ff%Fd%Ff"
FdやFfのような修飾子を見た人はいますか?もしそうなら、それはどういう意味ですか?
情報が見つからないようです。コードはコンパイルされ、正常に実行されます。
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
F
1. C89/C90は変換指定子
を認識しません。たとえばfscanf
、7.9.6.2の対応するC90段落の場合、次のようになります。変換指定子E、G、およびXも有効であり、それぞれe、g、およびxと同じように動作します。
ouahが指摘したように、これらは小文字の対応物と同じです。何故ですか?printf変換指定子との対称性のため。ここ%x
に、と%X
のような小文字または大文字の数字を書きdeadbeef
ますDEADBEEF
。対称性により、入力scanf
と出力の両方に同じフォーマット文字列を使用できますprintf
。
#define FMT "%F\n"
sscanf (str, FMT, &value);
printf (FMT, value);
%F
POSIX(およびC99)拡張機能です。
http://pubs.opengroup.org/onlinepubs/007904975/functions/scanf.html
「変換指定子A、E、F、G、およびXも有効であり、それぞれa、e、f、g、およびxと同等である必要があります。」