Rumah >pembangunan bahagian belakang >C++ >Bagaimana Termasuk Pengawal Gagal Mencegah Ketergantungan Pekeliling dalam C?

Bagaimana Termasuk Pengawal Gagal Mencegah Ketergantungan Pekeliling dalam C?

DDD
DDDasal
2024-12-31 21:55:091065semak imbas

How Do Include Guards Fail to Prevent Circular Dependencies in C  ?

Sertakan Pengawal dan Kebergantungan Pekeliling dalam C

Isu anda timbul daripada pekeliling #include dependencies dalam kod anda. Dalam persediaan anda, Physics.h termasuk GameObject.h dan GameObject.h perlu memasukkan Physics.h untuk mengakses kelas Fizik.

Cara Prapemproses Mengendalikan #include

Preprocessors memproses #include statement dengan menyalin secara fizikal kandungan fail yang disertakan ke dalam fail semasa. Dalam kes anda:

  • serta "Physics.h" dalam GameObject.h menyalin kandungan Physics.h ke dalam GameObject.h.

  • Inside Physics. h, #include "GameObject.h" kemudian cuba memasukkan kandungan yang disalin GameObject sekali lagi.

Mengapa Termasuk Pengawal Gagal

Sertakan pengawal tidak berkesan dalam mencegah kebergantungan bulat. Pertimbangkan kod berikut:

// Physics.h
#ifndef PHYSICS_H
#define PHYSICS_H
#include "GameObject.h"
#endif

Apabila prapemproses memproses kod ini, GameObject.h akan disalin ke dalam Physics.h. Walau bagaimanapun, prapemproses tidak mengetahui tentang rujukan bulat dan melaksanakan baris #include dalam kandungan salinan GameObject, yang cuba memasukkan Physics.h (sudah disertakan). Ini membawa kepada ralat masa kompilasi.

Menyelesaikan Ketergantungan Pekeliling

Untuk menyelesaikan kebergantungan bulat, pengisytiharan hadapan boleh digunakan. Dalam kes anda:

Fizik.h

class Physics;  // Forward declaration

class GameObject {
    // ...
    Physics* physics;  // Pointer to Physics object
    // ...
};

GameObject.h

#include "Physics.h"

class GameObject {
    // ...
    Physics physics;  // Actual object declaration
    // ...
};

Dengan menggunakan hadapan pengisytiharan dalam Physics.h dan mengisytiharkan objek sebenar dalam GameObject.h, pengkompil boleh memisahkan definisi ini kelas. Mula-mula ia boleh memproses pengisytiharan hadapan dalam Physics.h, dan kemudian memproses definisi objek sebenar dalam GameObject.h, mengelakkan sebarang isu pekeliling.

Atas ialah kandungan terperinci Bagaimana Termasuk Pengawal Gagal Mencegah Ketergantungan 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