可変引数関数 printf() での Float 引数の Double への昇格
C および C では、 printf() 関数は可変引数関数です可変数の引数を取ります。 printf() の独特な動作の 1 つは、float 引数が渡されると、関数がそれを受け取る前に double に変換されることです。ここで疑問が生じます: すべての可変個引数関数は float 引数を double にプロモートしますか?
答え:
はい、C および C の可変個引数関数は float 引数を double にプロモートします。
理由:
この動作は指定されていますC99 と C 標準の両方で。 C99 標準草案では、可変個引数関数について「float 型の引数は double に昇格される」と指定しています。同様に、C 標準では、「浮動小数点昇格の対象となる浮動小数点型は、呼び出し前に引数の値が昇格型に変換される」と規定されています。
この昇格の背後にある理論的根拠は次のとおりです。 K&R C 標準との互換性を維持します。K&R C 標準では、プロトタイプ宣言がない場合に float 引数を double にプロモートする必要がありました。常に望ましいとは限りませんが、この互換性は下位互換性の理由から維持されています。
以上がすべての可変個引数関数は浮動小数点引数を double にプロモートしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。