Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Perlu Sertakan Fail Pengepala (.h) Daripada Fail Pelaksanaan (.cpp) dalam C ?

Mengapa Saya Perlu Sertakan Fail Pengepala (.h) Daripada Fail Pelaksanaan (.cpp) dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-11-26 01:06:12504semak imbas

Why Should I Include Header (.h) Files Instead of Implementation (.cpp) Files in C  ?

Termasuk Fail .cpp: Kes Pertindihan Fungsi

Apabila membangun dalam C , biasanya disyorkan untuk memasukkan pengepala (.h) fail untuk kefungsian, bukannya fail pelaksanaan (.cpp). Termasuk fail .cpp boleh membawa kepada ralat disebabkan pertindihan fungsi.

Mari kita pertimbangkan contoh kod berikut:

// main.cpp
#include <iostream>
#include "foop.h" // Header file containing the function declaration

int main() {
  std::cout << foo(42) << std::endl;
  return 0;
}

// foop.h
int foo(int a); // Function declaration

// foop.cpp
int foo(int a) { // Function definition
  return ++a;
}

Kod ini akan disusun dan dijalankan dengan betul kerana fail pengepala (.h) hanya termasuk pengisytiharan fungsi foo(), manakala takrifan disediakan dalam fail .cpp yang berasingan.

Walau bagaimanapun, jika kita menggantikan kemasukan fail pengepala dalam main.cpp dengan kemasukan fail .cpp:

// main.cpp
#include <iostream>
#include "foop.cpp" // Implementation file containing the function definition

Ini akan mengakibatkan ralat pengkompil:

multiple definition of foo(int)
first defined here

Ini kerana prapemproses menyalin kandungan fail yang disertakan ke dalam fail sumber utama. Termasuk fail .cpp dengan berkesan menyalin definisi fungsi foo() ke dalam main.cpp, yang menghasilkan takrifan pendua bagi fungsi tersebut.

Untuk mengelakkan pertindihan fungsi, adalah disyorkan untuk memasukkan fail pengepala (.h) hanya untuk pengisytiharan dan fail .cpp untuk definisi. Ini membantu memastikan fungsi ditakrifkan sekali sahaja dalam program.

Atas ialah kandungan terperinci Mengapa Saya Perlu Sertakan Fail Pengepala (.h) Daripada Fail Pelaksanaan (.cpp) dalam C ?. 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