# Externe Abhängigkeiten



## HolgerX (6. Mai 2004)

Hallo.

Als absoluter Neuling in C++ würde ich gerne mal wissen, was es mit den *Externen Abhängigkeiten* auf sich hat.
Welche Dateien kommen da (bei VC++) in den Ordner hinein?

Außerdem muss ich für meine Diplomarbeit mit alten C-Funktionen arbeiten.
Dort steht im Quelltext: 
	
	
	



```
#ifdef __cplusplus
extern "C" {
#endif
```
Was hat das zu bedeuten?
Ja, ich weiss, dass man mittels __cplusplus feststellen kann, ob es sich um einen C++ Kompiler handelt, aber was bedeutet dieses *extern "C"{* ?


----------



## oglimmer (6. Mai 2004)

Na ich sage mal, dass die externen Abhängigkeiten die Files sind, die zwar includiert werden, aber nicht im eigenen Verzeichnis stehen. Sind sozusagen exterene Header Files.


```
extern "C" {
....
}
```

Ist etwas komplizierter. Der Compiler macht aus jeder Methode oder Funktion eine eindeutige Signatur, d.h. er baut einen eindeutigen String auf, der Rückgabewert, Name, Anzahl und Art der Parameter, etc beinhaltet. Leider ist das nicht standadisiert und so macht das  jeder Compiler anders.
Für C ist es aber standadisiert und so kann man dem Compiler mit extern "C" sagen, dass er bitte die alte C naming convention verwenden soll, so kannst Du Code aus anderen Sprachen und Compilern verwenden.

Die Naming Convention sieht man übrigens wenn man einen "unresolved symbol" error bekommt.


----------



## Konsumierer (11. Mai 2005)

Moin,

wie funktioniert das mit den externen Abhängigkeiten?
Ich habe eine vorgegebene Verzeichnisstruktur in meinem Projektordner. In verschiedenen Unterordnern befinden sich Headerfiles.

Beispiel: Arbeitsverzeichnis\INCLUDE\baset.h

Eingefügt werden soll diese Datei mit

```
#include "baset.h"
```

Ich krieg es einfach nicht hin. Bitte um Hilfe!


----------



## Tobias K. (11. Mai 2005)

moin


Heir mal eine Erklärung aus der MSDN:


> The extern keyword declares a variable or function and specifies that it has external linkage (its name is visible from files other than the one in which it's defined). When modifying a variable, extern specifies that the variable has static duration (it is allocated when the program begins and deallocated when the program ends). The variable or function may be defined in another source file, or later in the same file. Declarations of variables and functions at file scope are external by default.
> Example
> // specifying_linkage1.cpp
> int i = 1;
> ...




mfg
umbrasaxum


----------



## Konsumierer (11. Mai 2005)

Danke! Aber ich wollte nicht das Zeug mit extern "C" wissen, sondern das was ich geschrieben habe ;-)


----------



## Tobias K. (11. Mai 2005)

moin


Und?!
Steht doch alles drin.


mfg
umbrasaxum


----------



## Konsumierer (11. Mai 2005)

Nee, nicht so wirklich.
Ich hab VC6.0 und wenn ich Header Files in den Ordner "Externe Abhängigkeiten" verschiebe, dann findet der Linker/Compiler (was auch immer) diese Header nicht, weil sie in Unterverzeichnissen liegen. Wie mach ich das?


----------



## Tobias K. (11. Mai 2005)

moin


Es geht also mehr um den Ordner als um den Begriff extern "C"?
Wo ist denn der Ordner?


mfg
umbrasaxum


----------



## Konsumierer (11. Mai 2005)

Ich hab doch gar nix von extern "C" geschrieben ...   

Beachte: Post #1 und #2 sind schon ein Jahr alt.
Mich interessiert nur der Ordner. Wie ich den benutze.

In einem anderen Projekt habe ich gesehen, dass dort Header aus Unterverzeichnissen drin waren und im Programmcode lediglich #include "header.h" stand. Anstatt #include "dir\header.h". Und genau das will ich auch, nur klappt es eben nicht. Vielleicht muss man irgendwo in den Projekteinstellungen noch was ändern. Habe schon etliches ausprobiert.

Der Ordner befindet sich in der Dateiansicht, dort wo auch Klassen und Resourcen zu sehen sind, nur halt bei Dateien.


----------



## Tobias K. (11. Mai 2005)

moin



Achsooo.
War von dem Code-Beispiel aus Post 1 irritiert.

Hab dein Problem jetzt auch verstanden, obwohl ich nciht verstehe warum du das Unterverzeichnis nciht einfach mit angeben willst.



> In einem anderen Projekt habe ich gesehen, dass dort Header aus Unterverzeichnissen drin waren und im Programmcode lediglich #include "header.h" stand. Anstatt #include "dir\header.h".


Wenn das so ist, wurde irgendwo in den Projekteinstellungen angegeben, das der Compiler und/oder Linker auch in dem Unterverzeichnis nach der Header suchen soll.

Hoffe das war jetzt die Antowrt die du wolltest.


mfg
umbrasaxum


----------



## Konsumierer (11. Mai 2005)

Die Unterverzeichnisse mit angeben kann ich nicht, da ich in mein Projekt ein .c file und mehrere .h files einbinden muss, die ich geliefert bekomme und die sich immer wieder ändern. D.h. ich darf sie selber nicht ändern. 

In den Projekteinstellungen habe ich schon eingestellt, dass in den ganzen Unterverzeichnissen auch gesucht werden soll (jedes einzeln angegeben), so wie es bei dem anderen Projekt auch war, bei dem das ganze funktioniert.

Any ideas?


----------



## Konsumierer (11. Mai 2005)

Okee... habs rausgefunden.

Ich habe die Unterverzeichnisse mit "..\dir" suchen lassen statt mit "dir", weil es so im anderen Projekt war, dieses aber ebenfalls in einem Unterverzeichnis war.

Trotzdem Danke, Umbra!


----------

