Bagaimanakah Kemasukan Tajuk Pekeliling Boleh Dielakkan dalam C ?

Barbara Streisand
Lepaskan: 2024-10-26 15:26:02
asal
973 orang telah melayarinya

How Can Circular Header Inclusion Be Avoided in C  ?

Pengepala Termasuk Satu Sama Lain dalam C

Fail pengepala C boleh merangkumi satu sama lain, tetapi garis panduan tertentu mesti dipatuhi untuk mengelakkan ralat penyusunan.

Sertakan Peletakan Penyata

sertakan penyata hendaklah diletakkan di dalam makro prapemproses, dikenali sebagai pengadang termasuk, untuk mengelakkan kemasukan berbilang. Ini amat penting apabila pengepala menyertakan satu sama lain.

Pengisytiharan Hadapan

Pertimbangkan kod berikut di mana dua kelas, A dan B, merangkumi satu sama lain:

<code class="cpp">// A.h

#ifndef A_H_
#define A_H_

#include "B.h"

class A
{
public:
    A() : b(*this) {}

private:
    B b;
};

#endif</code>
Salin selepas log masuk
<code class="cpp">// B.h

#ifndef B_H_
#define B_H_

#include "A.h"

class B
{
public:
    B(A& a) : a(a) {}

private:
    A& a;
};

#endif</code>
Salin selepas log masuk

Dalam senario ini, pengkompil menemui kelas B terlebih dahulu, tetapi A masih belum diisytiharkan. Untuk menyelesaikan masalah ini, pengisytiharan hadapan A hendaklah disertakan sebelum takrifan B:

<code class="cpp">// B.h

#ifndef B_H_
#define B_H_

class A;  // Forward declaration of class A

#include "A.h"

class B
{
public:
    B(A& a) : a(a) {}

private:
    A& a;
};

#endif</code>
Salin selepas log masuk

Pengisytiharan hadapan ini memaklumkan pengkompil bahawa A ialah kelas, walaupun takrifan lengkapnya masih belum tersedia.

Dalam Amalan

Secara amnya, #include kenyataan harus diletakkan di dalam termasuk pengawal, dan pengisytiharan hadapan harus digunakan apabila pengepala perlu merujuk kepada kelas yang ditakrifkan dalam pengepala yang disertakan kemudian. Dengan mengikuti garis panduan ini, anda boleh mengelakkan ralat kompilasi yang disebabkan oleh pekeliling termasuk.

Atas ialah kandungan terperinci Bagaimanakah Kemasukan Tajuk Pekeliling Boleh Dielakkan 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!