Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Di manakah parameter lalai harus ditakrifkan dalam C : pengisytiharan atau definisi?

Di manakah parameter lalai harus ditakrifkan dalam C : pengisytiharan atau definisi?

DDD
DDDasal
2024-10-30 01:53:29755semak imbas

Where should default parameters be defined in C  : declaration or definition?

Parameter Lalai dalam Definisi Fungsi lwn. Pengisytiharan

Dalam C , fungsi boleh diisytiharkan dengan parameter lalai, membenarkannya dipanggil tanpa memberikan nilai untuk semua argumen. Walau bagaimanapun, sintaks untuk menentukan parameter lalai boleh berbeza-beza.

Kes 1:

<code class="cpp">int Add(int a, int b = 3);
int Add(int a, int b);</code>

Kes 2:

<code class="cpp">int Add(int a, int b);
int Add(int a, int b = 3);</code>

Kedua-dua sintaks adalah sah. Walau bagaimanapun, pendekatan standard dan disyorkan ialah Kes 1, di mana parameter lalai ditentukan dalam pengisytiharan fungsi. Ini kerana:

Pertimbangkan senario berikut:

  • Fail pengepala (lib.h) mengisytiharkan fungsi dengan sama ada sintaks.
  • Fail pelaksanaan yang berasingan ( lib.cpp) mentakrifkan fungsi dengan parameter lalai.
  • Fail sumber lain (test.cpp) termasuk fail pengepala dan memanggil fungsi tanpa memberikan nilai untuk parameter lalai.

Dalam Kes 1:

Pengkompil akan melihat pengisytiharan parameter lalai dalam fail pengepala semasa penyusunan test.cpp. Ini memastikan bahawa panggilan ke fungsi dalam test.cpp adalah sah, walaupun parameter lalai tidak diberikan secara eksplisit.

Dalam Kes 2:

Pengkompil akan tidak melihat pengisytiharan parameter lalai dalam fail pengepala semasa penyusunan test.cpp, kerana ia hanya ditakrifkan dalam fail pelaksanaan (lib.cpp). Ini akan mengakibatkan ralat kompilasi dalam test.cpp, kerana parameter lalai tidak diisytiharkan.

Oleh itu, menentukan parameter lalai dalam pengisytiharan fungsi (lib.h) ialah cara standard untuk memastikan tingkah laku yang konsisten merentas unit kompilasi yang berbeza.

Atas ialah kandungan terperinci Di manakah parameter lalai harus ditakrifkan dalam C : pengisytiharan atau definisi?. 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