Externe Abhängigkeiten

HolgerX

Mitglied
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:
Code:
#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"{ ?
 
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.

Code:
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.
 
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
Code:
#include "baset.h"

Ich krieg es einfach nicht hin. Bitte um Hilfe!
 
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;
void other( void );
int main(){
/* Reference to i, defined above: */
extern int i;
}
void other( void ){
/* Address of global i assigned to pointer variable: */
static int *external_i = &i;
/* i is redefined; global i no longer visible: */
int i = 16;
}
In C++, when used with a string, extern specifies that the linkage conventions of another language are being used for the declarator(s). C functions and data can be accessed only if they are previously declared as having C linkage. However, they must be defined in a separately compiled translation unit.
Microsoft C++ supports the strings "C" and "C++" in the string-literal field. All of the standard include files use the extern "C" syntax to allow the run-time library functions to be used in C++ programs.
Example
The following example shows alternative ways to declare names that have C linkage:
// specifying_linkage2.cpp

// Declare printf with C linkage.
extern "C" int printf( const char *fmt, ... );

// Cause everything in the specified header files
// to have C linkage.
extern "C"
{
// add your #include statements here
#include <stdio.h>
}

// Declare the two functions ShowChar and GetChar
// with C linkage.
extern "C"
{
char ShowChar( char ch );
char GetChar( void );
}

// Define the two functions ShowChar and GetChar
// with C linkage.
extern "C" char ShowChar( char ch )
{
putchar( ch );
return ch;
}

extern "C" char GetChar( void )
{
char ch;

ch = getchar();
return ch;
}

// Declare a global variable, errno, with C linkage.
extern "C" int errno;

int main()
{
}


mfg
umbrasaxum
 
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?
 
moin


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


mfg
umbrasaxum
 
Ich hab doch gar nix von extern "C" geschrieben ... :rolleyes:

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.
 
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
 
Zurück