次のタイプの行を持つレガシーコードに出くわしました。
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
F1. 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);
%FPOSIX(およびC99)拡張機能です。
http://pubs.opengroup.org/onlinepubs/007904975/functions/scanf.html
「変換指定子A、E、F、G、およびXも有効であり、それぞれa、e、f、g、およびxと同等である必要があります。」