Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Mengendalikan Kemasukan Tajuk Pekeliling dalam C?

Bagaimana Mengendalikan Kemasukan Tajuk Pekeliling dalam C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-27 15:49:01229semak imbas

 How to Handle Circular Header Inclusions in C  ?

Pengepala Termasuk Satu Sama Lain dalam C

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!

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