Unutmayın, C / C ++ önişlemcisi ayrı, tamamen metinsel bir işlem adımıdır. #include
Dahil başlığının içeriği direktif çeker ve derleyici bunu ayrıştırması gerekir. Dahası, her birinin derlenmesi .cpp
tamamen ayrıdır, bu yüzden derleyicinin B.h
derleme sırasında sadece ayrıştırılması , derlerken B.cpp
tekrar ihtiyaç duyduğunda en azından yardımcı olmaz A.cpp
. Ve derlerken tekrar C.cpp
. Ve D.cpp
. Ve bunun gibi. Ve içinde bulunan herhangi bir dosya değiştiyse, bu dosyaların her birinin yeniden derlenmesi gerekir.
Yani sınıf söylemek A
kullanımları sınıfını B
ve sınıfları C
ve D
kullanım sınıfı A
, ancak manipüle etmek gerekmez B
. Sınıf A
sadece ileri bildirimi ile bildirilebiliyorsa, iki kez derlenenden B
daha fazladır B.h
: derlerken B.cpp
ve A.cpp
(çünkü B
hala A
yöntemler içinde gerekli ).
Ama A.h
içerir B.h
, derlenmiş dört derleme zamanlar- B.cpp
, A.cpp
, C.cpp
ve D.cpp
daha sonra iki şimdi dolaylı dahil olarak B.h
da.
Üstbilgi birden çok kez dahil edildiğinde, önişlemcinin her seferinde yine de okuması gerekir . Korumalar nedeniyle içeriğinin işlenmesini atlayacaktır #ifdef
, ancak yine de onu okur ve muhafazanın sonunu araması gerekir, bu da içindeki tüm önişlemci yönergelerini ayrıştırması gerektiği anlamına gelir.
(Diğer cevapta belirtildiği gibi, önceden derlenmiş başlıklar bu soruna geçici bir çözüm bulmaya çalışır, ancak bunlar kendi solucan kutularıdır; temel olarak bunları sistem başlıkları için ve yalnızca çok fazla kullanmıyorsanız, ancak projenizdeki başlıklar)
vehicle.h
,bus.h
,toybus.h
.vehicle.h
tarafından dahil etmekbus.h
vebus.h
dahil etmektoybus.h
. eğer biraz değişiklik yaparsambus.h
. derleyicivehicle.h
tekrar açılıp ayrıştırılıyor mu? tekrar derliyor mu?