Rumah > pembangunan bahagian belakang > C++ > Mengapakah memasukkan fail .cpp dan bukannya fail .h dalam C membawa kepada ralat?

Mengapakah memasukkan fail .cpp dan bukannya fail .h dalam C membawa kepada ralat?

DDD
Lepaskan: 2024-12-04 10:01:11
asal
248 orang telah melayarinya

Why does including a .cpp file instead of a .h file in C   lead to errors?

Termasuk Fail Pengepala berbanding Kod Sumber

Apabila bekerja dengan berbilang fail sumber dalam program C, adalah penting untuk memahami perbezaan antara memasukkan pengepala fail (.h) dan fail kod sumber (.cpp).

Dalam contoh yang diberikan, anda mengalami ralat semasa memasukkan "foop.cpp" dan bukannya "foop.h" dalam fail main.cpp. Ini kerana fail pengepala direka bentuk khusus untuk mengisytiharkan prototaip fungsi dan maklumat lain yang diperlukan, manakala fail kod sumber mengandungi pelaksanaan fungsi sebenar.

Termasuk Fail Pengepala

Termasuk pengepala fail membenarkan pengkompil untuk mencari dan mengenali fungsi yang ditakrifkan dalam fail kod sumber lain tanpa menduplikasi definisi. Dengan memasukkan "foop.h," fail main.cpp mendapat akses kepada prototaip fungsi foo(), membolehkan program memanggilnya tanpa mengetahui butiran pelaksanaan penuh.

Termasuk Fail Kod Sumber

Sebaliknya, termasuk "foop.cpp" secara langsung akan menyalin semua kod daripada fail itu ke dalam fail main.cpp, yang membawa kepada definisi berbilang ralat. Memandangkan foo() ditakrifkan dalam foop.cpp dan main.cpp, pengkompil menjadi keliru tentang definisi yang hendak digunakan.

Cara Ia Berfungsi

Apabila anda memasukkan fail pengepala, kandungannya disalin dengan berkesan ke dalam fail kod sumber semasa. Sebagai contoh, memasukkan "foop.h" akan menghasilkan kod setara berikut dalam main.cpp:

// Header file contents

int foo(int a);

int main(int argc, char *argv[]) {
  // Rest of the main.cpp code
}
Salin selepas log masuk

Walau bagaimanapun, termasuk "foop.cpp" akan membawa kepada ini:

// Source code file contents

int foo(int a){
    return ++a;
}

int main(int argc, char *argv[]) {
  // Rest of the main.cpp code
}
Salin selepas log masuk

Akibat

Memasukkan fail kod sumber secara langsung boleh menyebabkan akibat yang tidak diingini, seperti sebagai:

  • Pencemaran ruang nama: Fungsi dan pembolehubah yang ditakrifkan dalam foop.cpp akan menjadi sebahagian daripada ruang nama utama, yang berpotensi bercanggah dengan simbol global yang lain.
  • Pertambahan masa penyusunan: Termasuk sumber besar fail kod boleh melambatkan proses penyusunan.
  • Terdedah ralat: Kemasukan fail kod sumber secara manual kurang dipercayai daripada menggunakan fail pengepala, yang dijana secara automatik oleh pengkompil.

Amalan Terbaik

Oleh itu, adalah amalan yang baik untuk memasukkan fail pengepala ( .h) apabila merujuk kepada fungsi dan pengisytiharan, dan untuk memastikan pelaksanaan kod sumber dalam fail berasingan (.cpp). Ini memastikan modulariti kod, mengelakkan ralat dan meningkatkan kebolehbacaan kod.

Atas ialah kandungan terperinci Mengapakah memasukkan fail .cpp dan bukannya fail .h dalam C membawa kepada ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan