Unbenötigte Header checken trotz 'define'

Hi,
ich habe ein Problem mit meinem C Projekt. Das Ding ist mittlerweile recht groß und es arbeiten mehrere Leute daran. Um laufend auftretende Headerfehler zu vermeiden, wurden sämtlich Header mit

#ifndef \_HEADERNAME\_H\_
#define \_HEADERNAME\_H\_
...
#endif

gekappselt, damit die Header jeweils nur einmal eingebunden werden. Allerdings bekommen wir jetzt langsam Probleme, dass alte Header in Dateien includiert werden, die gar nicht mehr benötigt werden. Leider meckert weder der C-Kompiler noch ein Lint Tool diesen Fehler, da die includierten Header ja immer das define enthalten.

Jemand eine Idee, wie ich trotzdem schnell überflüssige Header finden kann?

Grüße

Ralph

Hallo Ralph,

überflüssig heisst, compilieren geht auch ohne - m.a.W. ob ein Header überflüssig ist, lässt sich nur feststellen, indem man versucht, ohne ihn zu compilieren. Das ist natürlich mühsam.

Was lint u.ä. angeht, überflüssige Definitionen sind ja nicht wirklich ein Fehler. Ich kenne zwar so etwas wie „warning: unused variable“, aber ich weiss nicht, ob das auch für blosse Definitionen geht, und wenn, dann gäbe es vermutlich Tausende solche Warnings. Jedes Projekt enthält unzählige aktuell nicht gebrauchte Definitionen, auch wenn man die komplett überflüssigen Header entfernt.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi

Jemand eine Idee, wie ich trotzdem schnell überflüssige Header
finden kann?

Klar, mit dem Holzhammer. Wenn es sich um Deine
eigenen Header handelt, so gehst Du so vor:

  • Du nennst alle Headerfiles um, von abc.h, bcd.h
    nach abc-x.h bcd-x.h usw.
  • Jetzt nennst Du die paar „guten“ Header wieder zurück,
    die Du meinst tatsächlich zu brauchen
  • wenn Du jetzt kompilierst, zeigt Dir der Compiler an,
    an welcher Stelle eine Headerdatei eingebunden wird, die
    Du nicht haben möchtest.

Oder habe ich Dein Problem falsch verstanden?

Grüße

CMБ

überflüssig heisst, compilieren geht auch ohne - m.a.W. ob ein
Header überflüssig ist, lässt sich nur feststellen, indem man
versucht, ohne ihn zu compilieren. Das ist natürlich mühsam.

Bei mehreren tausend Dateien kann das lästig werden, deswegen suche ich eine einfachere/automatisch Möglichkeit…

Was lint u.ä. angeht, überflüssige Definitionen sind ja nicht
wirklich ein Fehler. Ich kenne zwar so etwas wie „warning:
unused variable“, aber ich weiss nicht, ob das auch für blosse
Definitionen geht, und wenn, dann gäbe es vermutlich Tausende
solche Warnings. Jedes Projekt enthält unzählige aktuell nicht
gebrauchte Definitionen, auch wenn man die komplett
überflüssigen Header entfernt.

Das stimmt, Lint zeigt überflüssige Header, Funktionen, Variablen u.ä. an, unser Projekt ist aber momentan Lint-able, das heisst keine überflüssige Definition/Deklaration ist vorhanden (Und die Header werden eben nicht mitgezählt, da dort ein Define drin steht, welches eine Zeile darüber auf verwendet wird, also ist der Header anscheinend nötig :frowning: )

Ralph

Hi

Jemand eine Idee, wie ich trotzdem schnell überflüssige Header
finden kann?

Klar, mit dem Holzhammer. Wenn es sich um Deine
eigenen Header handelt, so gehst Du so vor:

  • Du nennst alle Headerfiles um, von abc.h, bcd.h
    nach abc-x.h bcd-x.h usw.
  • Jetzt nennst Du die paar „guten“ Header wieder zurück,
    die Du meinst tatsächlich zu brauchen
  • wenn Du jetzt kompilierst, zeigt Dir der Compiler an,
    an welcher Stelle eine Headerdatei eingebunden wird, die
    Du nicht haben möchtest.

Hi!
Genau das würde mein Problem lösen, wenn ich nicht mehrere tausend Dateien hätte, die jeweils bis zu 50 Header includieren…

Grüße

Ralph

Hi Ralph,

Bei mehreren tausend Dateien kann das lästig werden, deswegen
suche ich eine einfachere/automatisch Möglichkeit…

eine relativ einfach möglichkeit ist: In einer Header, die immer zuerst eingebunden ist (meistens eine portab.h oder platform.h) das entsprechende #define definieren. Dadurch wird die Header kein einziges Mal eingebunden, und der aufwand hält sich in grenzen.
Also: Alle potentiellen Header-defines untereinander Wegschreiben und benötigte auskommentieren.

Das stimmt, Lint zeigt überflüssige Header, Funktionen,
Variablen u.ä. an, unser Projekt ist aber momentan Lint-able,
das heisst keine überflüssige Definition/Deklaration ist
vorhanden (Und die Header werden eben nicht mitgezählt, da
dort ein Define drin steht, welches eine Zeile darüber auf
verwendet wird, also ist der Header anscheinend nötig :frowning:

Nein, eigentlich sollte lint so einstellbar sein, dass Header, deren inhalt ausserhalb der Datei nicht gebraucht wird, auch angezeigt werden. Ist aber sicherlich nicht einfach, sich durch alle optionen zu wursteln.

Gruß
Achim
achim