[C/C++] utilisation de code C dans du C++

utilisation de code C dans du C++ [C/C++] - C++ - Programmation

Marsh Posté le 17-06-2005 à 05:08:52    

bonjour
 
je suis en train de réaliser une interface avec Qt pour une vieille appli en C/Glut, le truc, c'est que je ne sais pas trop quelle est la façon la plus élégante d'intégrer les fichiers .c et .h au nouveau code que je vais faire :/
 
j'ai donc un main.c qui ressemble à ça :
 

Code :
  1. #include "fic1.h"
  2. #include "fic2.h"
  3. #include "fic3.h"
  4. #include "fic4.h"
  5. #include "main.h"
  6. int main(...)
  7. {
  8.    ...
  9. }
  10. void func1()
  11. {
  12. }
  13. ...
  14. void funcn()
  15. {
  16. }


 
et un main.h
 

Code :
  1. void func1();
  2. ...
  3. void funcn();


 
j'pensais naivement pouvoir renommer les deux fichiers en inter.c et inter.h puis renommer le main() en oldmain() sans oublier de l'ajouter dans le .h puis faire un main.cpp comme suite  [:boidleau] :
 

Code :
  1. #include "fic1.h"
  2. #include "fic2.h"
  3. #include "fic3.h"
  4. #include "fic4.h"
  5. #include "oldmain.h"
  6. int main(...)
  7. {
  8.     des trucs ...
  9.     oldmain(argc, argv);
  10. }


 
mais bon, d'une je trouve ça crade  [:yopyopyop]  et en plus ça compile pas   [:rhetorie%20du%20chaos] (comme ça c'est réglé :o)
je me prends un LNK2001 unresolved external symbol int __cdecl oldmain(..)
 
comment faut que j'include tout ça :??:


Message édité par trueslash le 17-06-2005 à 05:11:13
Reply

Marsh Posté le 17-06-2005 à 05:08:52   

Reply

Marsh Posté le 17-06-2005 à 09:31:38    

Je pense que le mieux c'est de mettre toutes les fonctions communes dans des fichiers séparés, sans aucun main() nul part.
Tu les écris en C, puis tu les compiles pour en faire une shared library (cf. la documentation de ton compilateur pour le(s) option(s) à utiliser).
 
Et dans le(s) .h correspondant(s), tu encadres tes fonctions par :
 

Code :
  1. #ifdef __cplusplus
  2. extern "C" {
  3. #endif
  4. /* mettre ici toutes les declarations de  
  5.    fonctions communes, ecrites en C */
  6. #ifdef __cplusplus
  7. }
  8. #endif


 
Et tu auras là du code réutilisable à volonté, en C ou en C++. :)
 
Ensuite, tu crées deux sources différents, un .c pour compiler en C, et un .cpp pour compiler en C++.
Tu codes tout ce qu'il faut, avec main() et tout le bazar qui va bien, avec le #include qui pointe sur le(s) fichier(s) .h de ta shared lib.
A la compilation, tu inclues la bibliothèque.  
Exemple avec gcc, en admettant que ta lib se nomme "libMaLib.so" :
gcc [options] -I/chemin/vers/mes/fichiers/include -L/chemin/vers/libMaLib.so -lMaLib source.c


Message édité par Elmoricq le 17-06-2005 à 09:33:05
Reply

Marsh Posté le 17-06-2005 à 10:06:33    

hmmmm ça m'interesse ça :)
 
pour la librairie, vaut faire une statique ou une dynamique :??:
 
je comprends la différence qu'il y a entre les deux mais je sais pas trop ce qui est mieux :/

Reply

Marsh Posté le 17-06-2005 à 10:08:38    

Avec la dynamique, il faudra livrer la bibliothèque en même temps que l'application, ce qui peut compliquer les choses.
Si les fonctions ne seront pas réutilisables en dehors de tes deux programmes, une bibliothèque statique serait peut-être plus judicieuse ?
 
A toi de voir.

Reply

Marsh Posté le 17-06-2005 à 10:10:31    

pour passer de dynamique à statique, il suffit de changer le type de projet de VC++ :??: ou il y a d'autres subtilités?
 
parce que bon, j'ai pas franchement toutes les clés pour décider pour le moment :p

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed