Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah Semua Fungsi Variadik Menggalakkan Hujah `terapung` kepada `menggandakan`?

Adakah Semua Fungsi Variadik Menggalakkan Hujah `terapung` kepada `menggandakan`?

Barbara Streisand
Barbara Streisandasal
2024-11-23 06:21:16683semak imbas

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

Promosi Argumen Terapung kepada Berganda dalam Fungsi Variadik

Dalam perbincangan sebelum ini, telah diperhatikan bahawa printf() mempromosikan hujah terapung kepada ganda sebelum menerimanya. Ini menimbulkan persoalan: adakah semua fungsi variadic melaksanakan promosi ini?

Promosi Argumen Variadic

Ya, mengikut piawaian C99 dan C, argumen apungan diserahkan kepada variadic fungsi dinaikkan kepada dua kali ganda.

Standard Spesifikasi

  • C99 (bahagian 6.5.2.2): "argumen yang mempunyai jenis apungan dinaikkan kepada dua kali ganda."
  • C ( seksyen 5.2.2): "jenis titik terapung... ditukar kepada jenis digalakkan sebelum panggilan."
  • C (bahagian 4.6): "Nilai apungan jenis boleh ditukar kepada nilai dua jenis Nilai tidak berubah."

cppreference pada Penukaran Fungsi Variadic

cppreference menyediakan ringkasan penukaran lalai untuk fungsi variadic dalam C :

  • std::nullptr_t to void*
  • Float arguments to double
  • Promosi integer untuk bool, char , pendek, dan penghitungan

Asal Promosi

Promosi ini diperkenalkan dalam C untuk keserasian dengan standard K&R C, walaupun terdapat potensi kelemahannya. Seperti yang dinyatakan oleh Rasional C:

"Untuk keserasian dengan amalan lepas, semua promosi hujah berlaku seperti yang diterangkan dalam K&R tanpa adanya pengisytiharan prototaip, termasuk promosi terapung yang tidak selalu diingini menjadi dua kali ganda."

Atas ialah kandungan terperinci Adakah Semua Fungsi Variadik Menggalakkan Hujah `terapung` kepada `menggandakan`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn