Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Kemasukan Tajuk Pekeliling Boleh Dielakkan dalam C ?

Bagaimanakah Kemasukan Tajuk Pekeliling Boleh Dielakkan dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-10-26 15:26:02974semak imbas

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>
<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>

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>

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!

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