Rumah >pembangunan bahagian belakang >C++ >Mengapa Tidak Sertakan Pengawal Cegah Pekeliling #include Isu?
Walaupun menggunakan include guards, isu pekeliling #includes berterusan. Ini kerana prapemproses, yang mengendalikan arahan #include, beroperasi dengan cara yang mendedahkan masalah asas.
Apabila prapemproses menemui pernyataan #include, ia menggantikannya dengan kandungan fail yang ditentukan. Contohnya, jika Physics.h menyertakan GameObject.h, prapemproses akan menggantikan baris #include "GameObject.h" dalam Physics.h dengan kandungan GameObject.h.
Walau bagaimanapun, jika GameObject.h juga termasuk Fizik.h, kebergantungan bulat dicipta. Apabila prapemproses menemui baris #include "Physics.h" dalam GameObject.h, ia cuba menggantikannya dengan kandungan Physics.h, yang menghasilkan gelung tak terhingga kerana Physics.h juga termasuk GameObject.h.
Untuk memahami perkara ini dengan lebih lanjut, pertimbangkan kod berikut:
// Physics.h #ifndef PHYSICS_H #define PHYSICS_H #include "GameObject.h" // Guard is present #endif // GameObject.h #ifndef GAMEOBJECT_H #define GAMEOBJECT_H #include "Physics.h" // Guard is also present #endif
Apabila prapemproses mengendalikan kod ini, ia menghasilkan dalam perkara berikut:
// Physics.h (after preprocessing) #ifndef PHYSICS_H #define PHYSICS_H // (GameObject.h was copy-pasted here) // (GameObject.h was copy-pasted again) #endif // GameObject.h (after preprocessing) #ifndef GAMEOBJECT_H #define GAMEOBJECT_H // (Physics.h was copy-pasted here) // (Physics.h was copy-pasted again) #endif
Seperti yang anda lihat, kedua-dua Physics.h dan GameObject.h kini mengandungi salinan antara satu sama lain, mengakibatkan pergantungan bulat.
Untuk menyelesaikan isu ini, adalah penting untuk mengelakkan pekeliling #termasuk dan sebaliknya menggunakan pengisytiharan hadapan. Pengisytiharan hadapan mengisytiharkan kewujudan jenis tanpa menyertakan takrifnya, membenarkan pengkompil untuk meneruskan tanpa memerlukan semua butiran jenis.
Atas ialah kandungan terperinci Mengapa Tidak Sertakan Pengawal Cegah Pekeliling #include Isu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!