Gibt es eine Möglichkeit, alle überflüssigen Header-Dateien in einer C/C++-Quelldatei herauszufinden?
Antworten
Zu viele Anzeigen?Seien Sie sich bewusst, dass redundante Includes hier eine gute Sache sein können, da sie die Header-Dateien in sich selbst einschließen. D.h. wenn B A enthält und C sowohl B als auch A enthält:
headera.h
headerb.h
#include "headera.h"
headerc.h
#include "headerb.h"
#include "headera.h"
Man könnte argumentieren, dass die Einbeziehung von A in C überflüssig ist, da sie bereits durch die Einbeziehung von B gegeben ist. Aber tatsächlich macht sie C unabhängig von der inneren Struktur von B. Wenn man sie entfernt, wird C abhängig auf B, um A einzuschließen.
Das ist eine ziemlich komplexe Frage. Sie kann auf zwei Arten interpretiert werden:
- Sie wollen #includes entfernen, die Ihnen nichts bringen.
- Sie sollten nach rekursiven Includes suchen.
1 ist wahrscheinlich nicht erforderlich. Includes liefern nur Informationen für den Compiler, sie sollten keine Allokation enthalten. Selbst wenn sie es tun und Sie es nicht tun, wird der Compiler dies überflüssig machen. Wenn Sie dies wirklich tun wollen, können Sie damit beginnen, Includes zu entfernen, von denen Sie glauben, dass Sie sie nicht brauchen, bis Sie "implicit declaration of..."-Fehler erhalten.
Bei 2 müssen Sie sich normalerweise keine Sorgen machen. Es ist ziemlich gängige Praxis, eine eindeutige #def zu verwenden, z.B.:
#ifndef __MY_LIB_H
#define __MY_LIB_H
...
#endif
Dies führt dazu, dass der Bibliothekskern weggelassen wird, wenn die Definition bereits vorhanden ist.
Wenn Sie alle oder die meisten Bibliotheken kontrollieren, können Sie die #ifndef
zu:
#ifdef __MY_LIB_H
#error "Lib included recursively"
#else
...
#endif