Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1604 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1122676
trueslash
(╯°□°)╯︵ MMM
Posté le 17-06-2005 à 05:08:52  profilanswer
 

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
mood
Publicité
Posté le 17-06-2005 à 05:08:52  profilanswer
 

n°1122729
Elmoricq
Modérateur
Posté le 17-06-2005 à 09:31:38  profilanswer
 

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
n°1122795
trueslash
(╯°□°)╯︵ MMM
Posté le 17-06-2005 à 10:06:33  profilanswer
 

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 :/

n°1122799
Elmoricq
Modérateur
Posté le 17-06-2005 à 10:08:38  profilanswer
 

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.

n°1122802
trueslash
(╯°□°)╯︵ MMM
Posté le 17-06-2005 à 10:10:31  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
requete SQL -> Array : perfectionnement du code !!Eclipse : code Java non reconnu
Javascript ScreennnnnnnnnnnnnnVLC: decodage d'un Truncated Exp-Golomb code [Résolu]
Générateur de code ?optimisation code CSS pour IE
[ASP] optimisateur de code ASP[Builder C++ 6] Utilisation dynamique d'une DLL [résolu...]
[SQL Server] Utilisation de xp_sendmail[C] - utilisation de chroot() (unistd.h)
Plus de sujets relatifs à : [C/C++] utilisation de code C dans du C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR