Sertakan pengawal do melindungi fail pengepala daripada kemasukan bersama dan rekursif.
Masalah timbul apabila terdapat kebergantungan antara takrifan struktur data dalam tajuk saling merangkumi. Contohnya:
// a.h #include "b.h" struct A { ... }; // b.h #include "a.h" struct B { A* pA; // error: class A is forward-declared but not defined };
Untuk menyelesaikan masalah ini, pengisytiharan hadapan hendaklah digunakan dan bukannya menyertakan pengawal:
// b.h #include "a.h" // Forward declaration of A struct A; struct B { A* pA; };
Sertakan pengawal do melindungi pengepala daripada kemasukan berlebihan dalam unit terjemahan yang sama. Walau bagaimanapun, berbilang takrifan masih boleh berlaku kerana kehadirannya dalam unit terjemahan yang berbeza.
Untuk menyelesaikannya, kata kunci sebaris boleh digunakan untuk membenarkan berbilang takrifan dalam unit terjemahan yang berbeza:
// header.h inline int f() { ... }
Sebagai alternatif, definisi fungsi boleh dialihkan ke fail sumber yang berasingan untuk mengelakkan berbilang definisi:
// source.cpp int f() { ... }
Atas ialah kandungan terperinci Mengapa Termasuk Pengawal Gagal Mencegah Rekursi Bersama dan Definisi Berbilang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!