Mailinglist Archive: opensuse-programming-de (8 mails)

< Previous Next >
Re: [opensuse-programming-de] Preprocessor: Einbinden von Header Dateien
  • From: Martin Hofius <Martin@xxxxxxxxxxxxxxxxx>
  • Date: Sun, 26 Oct 2008 16:16:25 +0100
  • Message-id: <200810261616.25570.Martin@xxxxxxxxxxxxxxxxx>
Hallo,

Am Samstag, 25. Oktober 2008 schrieb Thomas Hertweck:
Folgendes Szenario:

Es sei die folgende Verzeichnisstruktur gegeben:

./include

|-> first.h
|-> second.h

./src

|-> code.c

Der Quellcode code.c bindet die Datei first.h ein, diese Datei wiederum
bindet die Datei second.h ein. Der Quellcode wird im Verzeichnis ./src
[...]

./include

|-> first.h
|-> second.h

./src

|-> code.c
|-> second.h

Die Frage ist nun, welche Datei second.h wird letztendlich verwendet,
wenn der Code im Verzeichnis ./src wiederum mit dem Befehl "gcc -I.
-I../include" usw. uebersetzt wird. Ich haette eigentlich erwartet, dass
es die lokale Datei second.h ist, die eingebunden wird. Dem ist
allerdings nicht so, wie auch die von gcc ausgegebenen Abhaengigkeiten
zeigen:

code.o: code.c ../include/first.h ../include/second.h

Wenn Du second.h mit #include "second.h" IN DER first.h einbindest, dann sieht
gcc vermutlich das Verzeichnis ../include als aktuelles Verzeichnis - und
dann ist es doch evtl. richtig, die Datei eben aus genau diesem Verzeichnis
einzubinden. Das hat dann nichts mit den Compileroptionen zu tun, sondern
einfach damit, dass die äußere Datei (also first.h) einfach auch in diesem
Verzeichnis ist.
[...]

Wenn ich ebenfalls eine lokale Kopie von first.h in ./src anlege, dann
wiederum funktioniert die Sache. Ich verstehe also, was passiert und wie
der Preprocessor die -I Optionen handhabt: er scheint beim Einbinden von
Genau das ist ja dann die Wirkung: wenn Du first.h eben auch im
src-Verzeichnis hast, nimmt er ja dann auch die darin eingebundene second.h
eben aus diesem (dann aktuelle) Verzeichnis.

[...]

Die Frage ist nun: Bug oder Feature? Bzw. wer handhabt die Sache
korrekt, der Preprocessor oder makedepend?
Gute Frage... Aber eigentlich finde ich das Verhalten schon ganz sinnvoll:
wenn ich einen (Meta-)Header anlege, der hauptsächlich dazu dient, die vielen
anderen Header einzubinden, dann will ich doch eigentlich damit auch die
einzubindenden Dateien festlegen - und die sollten dann nicht davon abhängig
sein, von wo aus dieser Sammelheader wiederum eingebunden wird.

Gruesse,
Thomas

Gruß
Martin
--
To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: opensuse-programming-de+help@xxxxxxxxxxxx

< Previous Next >
List Navigation
References