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

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

class ReportsSync{ 

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

si j'ai un fichier cpp comme tis plutôt un fichier .h comme celui-ci, wud i pouvoir appeler des fonctions définit sql.c comme d'habitude, comme je suis appeler C++ fonctions ? par exemple: si sql.c a une fonction nommée foo, qui renvoie un type de données défini dans sql.c lui-même, puis-je utiliser le type de données retourné à l'intérieur de testQuery(), le manipuler ou le donner à la fonction suivante?fichiers c à l'intérieur d'un programme C++

+7

Ne pas inclure les fichiers .c! Inclure les fichiers .h *! – W55tKQbuRu28Q4xv

+0

ouais !! Je vais le faire .. –

+0

Je viens d'écrire ce qui me vient à l'esprit ...: P –

Répondre

2

Pour les directives #include, le préprocesseur ne fait qu'un remplacement de texte. C'est comme si vous copiez tout le texte de sql.c dans votre fichier source.

Alors oui, vous pouvez appeler les fonctions définies dans sql.c. La seule chose que je sache, c'est que si vos fonctions C prennent des pointeurs de fonction comme paramètres pour fournir un rappel. Vous ne devriez pas jeter d'exceptions dans un tel rappel parce que C ne connaît pas les exceptions C++. Toutefois, comme déjà indiqué dans les commentaires, il est plus commun de # inclure les fichiers d'en-tête. Vous pouvez donc utiliser les fonctions de sql.h dans plusieurs unités de compilation (fichier .c).

0

Juste une chose (trop grande pour mettre dans un commentaire).

Ajout extern "C" { <SOMETHING> } à une source C++ne faire automagiquement que quelque chose C. Il est toujours C++, mais l'interface de cette SOMETHING suit les règles C au lieu de C++.

#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 pour le programme ci-dessus enregistré en tant que "C++ c.src" et essai

 
$ 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