Bagaimana Mengendalikan Kemasukan Tajuk Pekeliling dalam C?

Mary-Kate Olsen
Lepaskan: 2024-10-27 15:49:01
asal
228 orang telah melayarinya

 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>
Salin selepas log masuk

Fungsi Utama:

<code class="cpp">// main.cpp
#include "A.h"

int main() {
  A a;
}</code>
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!