Wpis z mikrobloga

Mam plik Dupa.hpp, który includuje ,
plik Dupa.cpp, który includuje Dupa.hpp i używa czegoś z nagłówka
main.cpp, który includuje Dupa.hpp i używa czegoś z nagłówka

Czy w takiej sytuacji plik main.cpp powinien includować i dlaczego tak/nie?
Jeśli tak, to czemu plik Dupa.cpp nie powinien includować ?
Jak wpłynie to na czas kompilacji?

Przykład: https://godbolt.org/z/6h3oW1szd

#cpp
  • 5
@Malkof: dobra praktyka mówi, że includujesz wszystko czego dany plik w danej chwili używa, a nie polega na tym co includuje pośrednio inny header. więc jeżeli dupa.cpp używa czegoś z headera string, to powinien go zaincludowac(ale może to ciut spowolnić kompilację). chodzi o to, żeby każdy plik był "samokompilowalny". czyli żeby nie było sytuacji, że usuniemy includ z headera jakiegoś i nagle cpp przestaje się kompilować.
@MamCieNaHita: Ok, czyli Dupa.cpp nie powinna mieć , a main.cpp powinien mieć duplikat, żeby był "samokompilowalny"?
A co w przypadku, gdy mam jakiś header typu , który pewnie includuje , czy powinienem wtedy includować oba? Bo spowolni to proces kompilacji?
@Malkof: main.cpp używa bezpośrednio jakiejś funkcji albo klasy ze ? jeżeli tak, to tak, jeżeli nie, to nie.

jeżeli includujesz , a używasz czegoś ze , to powinieneś includować , bo nikt nie powiedział, ze nie można sr... że nie można zrobić bez w przyszłości i ci się przestanie kompilować po zmianie kompilatora.

jeszcze jest kolejna dobra praktyka, że jeżeli wystarczy forward deklaracja zamiast includa, to powinieneś użyć forward deklaracji(np. jeżeli