printf() での Float 引数の Double への昇格
前の議論で、float が printf に渡されるとき、 () の場合、関数で使用される前に double にプロモートされます。この動作は printf() に固有のものではなく、すべての可変引数関数に固有のものです。
プロトタイプ宣言がない場合、C および C のすべての引数の昇格は、K&R C 標準で定義されているように発生します。これには、望ましくない場合でも、float 引数を double に昇格することが含まれます。
可変個引数関数の引数の昇格
C99 標準 (セクション 6.5.2.2) に従って、引数はfloat 型の関数は、可変引数関数に渡される前に double にプロモートされます。同様に、C 標準 (セクション 5.2.2) では、浮動小数点引数は関数呼び出しの前にプロモート型 (double) に変換されると規定されています。
cppreference は、C の可変個引数関数のデフォルト変換の明確な概要を提供します。
K&R C との互換性
可変長引数関数における float 引数の double への昇格は、互換性のために C および C でも維持されました。オリジナルのK&R C規格を採用。データ損失の可能性に関する懸念にもかかわらず、この変換は下位互換性のためにそのまま残されています。
以上がprintf() やその他の可変個引数関数で Float 引数が Double に昇格されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。