「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > すべての可変引数関数は `float` 引数を `double` に昇格しますか?

すべての可変引数関数は `float` 引数を `double` に昇格しますか?

2024 年 11 月 16 日に公開
ブラウズ:200

Do All Variadic Functions Promote `float` Arguments to `double`?

可変長引数関数での浮動小数点引数の倍精度化

前の説明で、printf() は浮動小数点引数を倍精度浮動小数点関数で倍精度化することに注意しました。それを受け入れる前に倍増します。ここで疑問が生じます: すべての可変個引数関数はこの昇格を実行しますか?

可変個引数の昇格

はい、C99 および C 標準の両方に従って、浮動小数点引数は可変個引数に渡されます。関数は double に昇格されます。

Standard仕様

  • C99 (セクション 6.5.2.2): "float 型の引数は double に昇格されます。"
  • C (セクション 5.2.2): "浮動小数点型は... 前にプロモートされた型に変換されます。 call."
  • C (セクション 4.6): "float 型の prvalue は double 型の prvalue に変換できます。値は変更されません。"

可変引数関数の変換に関する cppreference

cppreference には、次のデフォルトの変換の概要が記載されています。 C の可変個引数関数:

  • std::nullptr_t から void*
  • Float 引数への double
  • bool、char、short、列挙型の整数昇格

の由来プロモーション

このプロモーションは、潜在的な欠点にもかかわらず、K&R C 標準との互換性のために C に導入されました。 C 理論的根拠には次のように記載されています:

「過去の慣行との互換性を保つため、プロトタイプ宣言がない場合、すべての引数の昇格は K&R で説明されているように行われます。これには、必ずしも望ましいとは限らない float から double への昇格も含まれます。」

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3