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

Bagaimana Termasuk Pengawal Gagal Mencegah Ketergantungan Pekeliling dalam C?

DDD
Lepaskan: 2024-12-31 21:55:09
asal
1051 orang telah melayarinya

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

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
    // ...
};
Salin selepas log masuk

GameObject.h

#include "Physics.h"

class GameObject {
    // ...
    Physics physics;  // Actual object declaration
    // ...
};
Salin selepas log masuk

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 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan