Hallo,
ich moechte gerne c unc c++ Dateien mischen.
Ich weiss, ich koennte auch googlen, aber da es zum Mischen mehrere
Moeglichkeiten gibt, wollte ich einen profesionellen Rat fuer meinen
Fall.
Also, dass Hauptprogramm ist in C und ich wuerde dort gerne am wenigsten
aendern. C-main() ruft dann in c++ meinCppLoop() auf, der wiederum
Funktionen in C aufruft.
olpo schrieb:> Ich weiss, ich koennte auch googlen, aber da es zum Mischen mehrere> Moeglichkeiten gibt, wollte ich einen profesionellen Rat fuer meinen> Fall
Wieviele unterschiedliche Möglichkeiten hast du denn schon gefunden?
Mir fällt nur eine einzige sinnvolle ein, nämlich die Funktionen callMe
und meinCppLoop im C++-Teil als extern "C" zu deklarieren, damit callMe
von C++ aus und meinCppLoop von C aus aufgerufen werden kann.
Diese Deklarationen macht man am besten in entsprechenden Header-Files,
die von beiden Teilen includet werden. Damit der C-Compiler nicht über
das extern "C" stolpert, muss dieses für C mit #ifdef __cplusplus
unsichtbar gemacht werden.
olpo schrieb:> Also, dass Hauptprogramm ist in C und ich wuerde dort gerne am wenigsten> aendern.
Wie wäre es damit, das Hauptprogramm und alle anderen "C" Teile einfach
mit einem C++ Compiler zu kompilieren? C++ ist größtenteils
abwärtskompatibel und erfordert nur winzige Änderungen an wenigen
Stellen (ohne dass diese Teile danach nicht mehr als C kompilierbar
wären). Einfach mit als C++ kompilieren und die Warnungen/Fehler
beheben.
So ersparst du dir die Fummeleimit 'extern "C"'.
ok danke,
ich wusste nicht, dass dieses Querzugreifen auch so einfach geht.
Leider hat sich doch noch ein Problem aufgetan: Der C-Code hat einige
#IFDEFs, die ich auch setze.
Der CPP-Code muss jetzt eine Header-Datei aus dem C-Code einfuegen, die
eben diese #IFDEFs beinhaltet.
Aber mein Compiler schafft das nicht aufzuloesen. Er behauptet, die
#IFDEFs waeren nicht gesetzt.
Was kann ich da tun?
olpo schrieb:> Leider hat sich doch noch ein Problem aufgetan: Der C-Code hat einige> #IFDEFs, die ich auch setze.>> Der CPP-Code muss jetzt eine Header-Datei aus dem C-Code einfuegen, die> eben diese #IFDEFs beinhaltet.> Aber mein Compiler schafft das nicht aufzuloesen. Er behauptet, die> #IFDEFs waeren nicht gesetzt.>> Was kann ich da tun?
Es richtig machen. Der Präprozessor funktioniert in C++ auch nicht
anders als in C. Da du nichts genaueres über die Art, wie du es
versuchst und über den Fehler sagt, kann man dir auch keinen besseren
Rat geben.
Hallo,
mein letztes Problem war durch doppelte Include-Files bedingt...
Yalu X. schrieb:> Mir fällt nur eine einzige sinnvolle ein, nämlich die Funktionen callMe> und meinCppLoop im C++-Teil als extern "C" zu deklarieren, damit callMe> von C++ aus und meinCppLoop von C aus aufgerufen werden kann.>> Diese Deklarationen macht man am besten in entsprechenden Header-Files,> die von beiden Teilen includet werden. Damit der C-Compiler nicht über> das extern "C" stolpert, muss dieses für C mit #ifdef __cplusplus> unsichtbar gemacht werden.
Ich mache das so in meinen Header-Dateien:
1
#ifdef __cplusplus
2
#define C_API extern "C"
3
#else
4
#define C_API
5
#endif
6
7
C_APIvoidcallMe(void);
1
C_APIvoidcallMe(void){
2
printf("Bier:gut);
3
}
Ich bekomme aber folgende Fehlermeldung:
1
header.h:53:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
Der Fehler wird geworfen, wenn eine C-Datei kompiliert wird, die
Header.h einbindet. callMe() wird in einer anderen C-Datei definiert.
Kann damit jmd etwas anfangen?
olpo schrieb:> Ich bekomme aber folgende Fehlermeldung:> header.h:53:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’> before ‘void’
Wie man schon leicht am Syntax Higlighting erkennen kann, fehlt oben ein
Anführungszeichen. Allerdings geht's wohl nicht um den oben gezeigten
Code, denn der hat gar keine 53 Zeilen.