Soalan:
Apabila bekerja dengan berbilang fail pengepala dalam C , sekiranya penyataan #include adalah diletakkan di dalam atau di luar makro? Secara khususnya, apakah yang berlaku apabila dua kelas merangkumi satu sama lain?
Jawapan:
Penempatan Makro:
#include statements hendaklah sentiasa diletakkan di dalam makro (#ifndef termasuk pengawal) untuk mengelakkan pengulangan tak terhingga semasa penyusunan.
Kemasukan Pekeliling:
Kemasukan bulat berlaku apabila dua kelas menyertakan pengepala satu sama lain. Untuk menyelesaikan masalah ini, pengisytiharan hadapan hendaklah digunakan sebelum mentakrifkan kelas yang termasuk rujukan kepada kelas lain.
Contoh:
Pertimbangkan fail pengepala berikut A.h dan B.h :
<code class="cpp">// A.h #ifndef A_H_ #define A_H_ #include "B.h" // Circular inclusion class A { B b; }; #endif // B.h #ifndef B_H_ #define B_H_ class A; // Forward declaration class B { A& a; }; #endif</code>
Fungsi Utama:
<code class="cpp">// main.cpp #include "A.h" int main() { A a; }</code>
Penjelasan:
Isu Kemasukan Pekeliling: Jika pernyataan #include diletakkan di luar makro, pengkompil akan menghadapi rekursi tak terhingga semasa cuba memasukkan kedua-dua pengepala.
Pengisytiharan Hadapan: Dalam B.h, pengisytiharan hadapan kelas A; digunakan. Ini memberitahu pengkompil bahawa A ialah kelas, tanpa memasukkan definisinya. Ini membolehkan B mengisytiharkan rujukan kepada A.
Tertib Kemasukan: Susunan kemasukan pengepala juga penting. A.h mesti disertakan sebelum B.h untuk membolehkan pengisytiharan ke hadapan.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Kemasukan Tajuk Pekeliling dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!