nehme ich mehrere "h" Dateien haben:Wie eine Warnung geben, wenn h-Datei nicht enthalten ist, direkt
First.h
struct FirstStruct { /* Stuff */ };
/* Other stuff */
Second.h
#include "First.h"
struct SecondStruct {
FirstStruct member;
/* More other stuff */
};
/* Even more other stuff */
Dritter. h:
#include "Second.h"
FirstStruct foo(void);
/* Other functions */
Wenn Siebemerkenerhält die Definition von FirstStruct nicht direkt (dh von First.h), sondern weil Second.h es für sie enthält. Das Problem ist, dass, wenn ein Entwickler entscheidet, dass SecondStruct
nicht wirklich das FirstStruct
dort braucht es die halb äquivalente Struktur OtherStruct
, und dann nimmt das Include zu First.h ...... oops jetzt nichts mit Third.h
nicht tut Arbeit.
Gibt es irgendeine Semi-Standard-Compiler-Option, um Sie zu warnen, wenn Sie sich auf einen anderen h-Dateien-Include verlassen müssen?
(a) Suchen Sie nach IWYU - Include, was Sie verwenden. (b) Wenn Sie die Änderung vorgenommen haben, sollte es einen Test gegeben haben, bei dem das Kompilierungsproblem entdeckt wurde. Es gibt keinen einfachen Weg dahin. –
Der Compiler wird sowieso "explodieren" ... weil die Deklaration für 'FirstStruct' in' Third.h' nicht ohne das '# include' gefunden wird. Mehrfache '#include <...>' sind nie ein Problem mit passenden Wachen. – WhiZTiM
@WhiZTiM Es wird nur explodieren, wenn der Entwickler es nicht in der Second.h, es wird nicht einmal zurückschrecken, wenn ich es geben, was ich jetzt habe – DarthRubik