可変個引数関数での Float プロモーション
可変個引数関数では、異なる型の可変数の引数を渡すことができます。 C および C では、 float 引数を printf() のような可変個引数関数に渡そうとすると、特有の動作が発生します。直感に反して、float は関数によって受け取られる前に double にプロモートされます。
Do Variadic Functions Auto-Promote Floats?
はい、C の可変個引数関数ですC では、float 引数が double に自動的に昇格されます。この動作は言語標準で定義されています:
C99 (ドラフト):
Arguments that have type float are promoted to double. These are called the default argument promotions.
C (ドラフト):
A floating point type that is subject to the floating point promotion, the value of the argument is converted to the promoted type before the call.
このプロモーションは、C の過去のバージョンとの互換性のために残されています。潜在的な欠点にもかかわらず、依然としてC99 および C のデフォルトの動作。
printf() の影響
printf() の場合、printf() が書式指定子と引数を予期しているためにこの現象が発生します。合わせるために。 double と float の形式指定子は異なるため、関数の要件を満たすために float 引数は double にプロモートされます。これにより互換性が確保され、浮動小数点引数の処理が簡素化されます。
以上がC および C の可変引数関数は自動的に float を double に昇格しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。