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!