Include-Pfade

jokey2

Erfahrenes Mitglied
Hallo Gemeinde!
Heute habe ich eine Frage zur Spezifikation von C:

Wenn ich in einer C-Datei eine #include-Anweisung mit einem relativen Pfad angebe und in dieser includierten H-Datei ebenfalls eine #include-Anweisung mit einem relativen Pfad angebe, ist der Pfad in der 2. Headerdatei relativ zum Speicherort der ersten Headerdatei oder relativ zum Speicherort der C-Datei?

Bsp:
Datei C.\Projekte\test\src\a.c:
Code:
#include "..\include\libinclude\b.h"
hier ist der Pfad relativ zu 'C:\Projekte\test\src'. Es wird also die Datei 'C.\Projekte\test\include\libinclude\b.h' gefunden.

Datei C.\Projekte\test\include\libinclude\b.h:
Code:
#include "..\include_2\c.h"
Und hier? Sucht er in 'C.\Projekte\test\include_2' oder in 'C.\Projekte\test\include\include_2'?
 
moin


Ich würde sagen in C.\Projekte\test\include\include_2
Bin mir aber nciht sicher.


mfg
umbrasaxum
 
Weil ich leider keine Zeit habe, dafür ein Testprojekt aufzusetzen.
Ich hoffe halt. daß hier jemand ist, der das sicher weiß.
Es kommt halt darauf an, in welcher Reihenfolge der Präprozessor die Dateien includiert. Top-Down (ersi 'b.h' in 'a.c' und dann 'c.h' in das erweiterte 'a.c') oder Bottom-Up(erst 'c.h' in 'b.h' und dann das erweiterte 'b.h' in 'a.c').
 
Zuletzt bearbeitet:
Hä? Bevor ich eine Frage in ein Forum tippe und auf eine Antwort hoffe, da hab ich doch 10x schneller ein Projekt angelegt und das ausprobiert. Also ich bin der Meinung das hier kostet mehr Zeit.
 
Während ich warte, kann ich aber was Anderes weitermachen.
Außerdem: Wie bringe ich einen Präprozessor dazu, mir das Verzeichnis auszugeben, das er gerade als Basisverzeichnis verwendet? Von einem solchen Pragma habe ich (leider) noch nichts gehört.
 
Relative Pfade immer von der Datei aus, die das Include beinhaltet. Also 'C.\Projekte\test\include\include_2'. Alles andere würde sowas wie common-Include-Verzeichnise unmöglich machen (oder man müsste immer alle includes ins Projektverzeichnis kopieren).

Ein einfacher Test zeigt, dass __FILE__ denn kompletten Pfad zu deinem File beinhaltet.

Anmerkung: Cool, es gibt ein __COUNTER__ Makro, das automatisch inkrementiert wird! Build-Number ohne lästiges Neukompilieren, ich komme!
 
jokey2 hat gesagt.:
Außerdem: Wie bringe ich einen Präprozessor dazu, mir das Verzeichnis auszugeben, das er gerade als Basisverzeichnis verwendet? Von einem solchen Pragma habe ich (leider) noch nichts gehört.

Wozu? Du legst einfach 3 Dateien (2 Header-Dateien und 1 C Datei) an und schreibst in jede eine #include Anweisung (sind insges. 3 Zeilen) und dann versuchste zu kompilieren, wenn er die 2te Header Datei (die von der ersten eingebunden wurde) nicht findet wird er schon Bescheid sagen.

/edit: wie gesagt, sind 3 Zeilen in 3 Dateien in unterschiedlichen Verzeichnissen, dein erstes Posting zu dem Thema hat bedeutend mehr Zeilen und du hast damit nicht nur deine eigene sondern unser aller Zeit verschwendet.
 
Zuletzt bearbeitet:
Super Info! Danke!

Ist __FILE__ ein ANSI-C++ - oder ANSI-C - Makro? Die MSDN sprechen nur von ANSI. Gibt es überhaupt ein ANSI-C++?
 
@deepthroat: Wenn Dir Deine Zeit zu kostbar ist, um Anderen zu helfen, das laß es!
Außerdem geht es bei m ir nicht um ein C++ - Projekt im VS sondern um ein Projekt mit dem dcc-Compiler für einen MPC565.
 
Zuletzt bearbeitet:
Zurück