2010-12-09 11 views
0
#include <iostream> 
#include <string> 
#include <vector> 

extern "C"{ 
#include "sql.c" 
} 

class ReportsSync{ 

    public: 
     string getQuery();      
     bool testQuery(string);   
}; 

wenn ich eine CPP-Datei wie tis habe, eher eine .h-Datei wie folgt, wud ich in der Lage sein, Funktionen aufzurufen definiert in sql.c wie üblich, wie i c bin Aufruf ++ Funktionen ? für zB: wenn sql.c hat eine Funktion namens foo, die einen Datentyp in sql.c selbst zurückgibt, kann ich den zurückgegebenen Datentyp innerhalb der testQuery(), manipulieren Sie es oder geben Sie es an die nächste Funktion?c Dateien in einem C++ Programm

+7

nicht .c Dateien sind Sie! Include .h * Dateien! – W55tKQbuRu28Q4xv

+0

ja !! Ich werde das tun .. –

+0

Ich schrieb gerade, was mir in den Sinn kam ...: P –

Antwort

2

Für # include-Direktiven führt der Präprozessor nur einen Textaustausch durch. Es ist, als ob Sie den gesamten Text von sql.c in Ihre Quelldatei kopieren würden.

Also ja, Sie können die in sql.c. definierten Funktionen aufrufen

Das einzige, was ich weiß, wo Sorgfalt erforderlich ist, ist, wenn Ihre C-Funktionen Funktionszeiger als Parameter verwenden, um einen Rückruf bereitzustellen. Sie sollten in einem solchen Callback keine Ausnahmen auslösen, weil C keine C++ - Exceptions kennt.

Wie bereits in den Kommentaren erwähnt, ist es häufiger # Headerdateien enthalten. Sie können also die Funktionen von sql.h in mehr als einer Übersetzungseinheit (.c-Datei) verwenden.

0

Nur eine Sache (zu groß, um einen Kommentar abzugeben).

Hinzufügen extern "C" { <SOMETHING> } zu einer C++ Quelle nicht automagically, dass etwas C machen. Es ist immer noch C++, aber die Schnittstelle von diesem ETWAS folgt C Regeln statt C++ Regeln.

#ifndef __cplusplus 

/* plain old C */ 
int y(void) { 
    return sizeof 'a'; 
} 

#else 

/* C++ */ 
#include <iostream> 

extern "C" { 
    int y(); /* y is defined above, compiled with a C compiler */ 
    int x() { 
    return sizeof 'a'; 
    } 
} 

int main() { 
    std::cout << "regular sizeof 'a' is " << sizeof 'a' << std::endl; 
    std::cout << "extern \"C\" sizeof 'a' is " << x() << std::endl; 
    std::cout << "plain old C sizeof 'a' is " << y() << std::endl; 
} 
#endif 

Compilation für das Programm oben gespeichert als "C++ c.src" und Testlauf

 
$ gcc -std=c89 -pedantic -c -xc c++c.src -o y.o 
$ g++ y.o -pedantic -xc++ c++c.src 
$ ./a.out 
regular sizeof 'a' is 1 
extern "C" sizeof 'a' is 1 
plain old C sizeof 'a' is 4