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

  FORUM HardWare.fr
  Programmation
  C++

  Executer une partie de code ou une autre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Executer une partie de code ou une autre

n°1589954
CeD69
Posté le 23-07-2007 à 10:20:20  profilanswer
 

Salut,
 
Je souhaiterais que soit executé une partie de code ou bien une autre partie de code en fonction d'une variable initialisée en début de fichier .cpp
 
exemple:  
si var = TRAITEMENT_1, executer la partie de code n°1
si var = TRAITEMENT_2, executer la partie de code n°2
 
Je crois que c'est faisable en utilisant les balises #define, mais je vois pas comment.
 
Merci d'avance.

mood
Publicité
Posté le 23-07-2007 à 10:20:20  profilanswer
 

n°1589958
LePhasme
Les Belges domineront le monde
Posté le 23-07-2007 à 10:27:35  profilanswer
 

http://casteyde.christian.free.fr/ [...] c1039.html

 

Google tips : c++ structure de controle if


Message édité par LePhasme le 23-07-2007 à 10:28:23
n°1589969
nathan_g
Posté le 23-07-2007 à 10:55:57  profilanswer
 

Une autre solution, peut être plus dans l'esprit de ce que tu voulais faire initialement :
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. #define VARIABLE 5
  4. int main()
  5. {
  6. #if VARIABLE==10
  7.   cout << "variable = 10" << endl;
  8. #elif VARIABLE==5
  9.   cout << "variable = 5" << endl;
  10. #else
  11.   cout << "La valeur n'est pas listée !" << endl;
  12. #endif
  13. }


 
Ainsi, le paramètre variable est comparée à partir de sa valeur définie dans le fichier, dès la compilation.

n°1589971
bjone
Insert booze to continue
Posté le 23-07-2007 à 11:01:35  profilanswer
 

heu vaut mieux donner le contexte, voir si y'a pas une solution plus propre....

n°1590039
CeD69
Posté le 23-07-2007 à 12:28:54  profilanswer
 

bjone a écrit :

heu vaut mieux donner le contexte, voir si y'a pas une solution plus propre....


 
Merci nathan_g, c'est exactement ça que je cherchais.
 
Voici le contexte. Il s'agit d'un serveur qui peut être compilé soit sous la forme d'un serveur HTTP, soit sous la forme d'un serveur SIP (communication VoIP). Vu que je me base sur un serveur HTTP pour y construire le serveur SIP, je souhaite garder en commun aux deux la plus grande partie du code, et mettre des #ifdef / #endif pour les parties distinctes.
 
Ainsi, par exemple:  
 
dans le header :

Code :
  1. // Server use (one of these below)
  2. #define SERVER_USE_HTTPS   1
  3. //#define SERVER_USE_SIPS   2


 
dans le source :

Code :
  1. #ifdef SERVER_USE_HTTPS
  2. INT     iPortNumber     = 443;     // default for HTTPS is 443
  3. #else
  4. INT  iPortNumber  = 5061;     // default for SIPS is 5061
  5. #endif


 
Je ne suis pas sur que ce soit la solution la plus propre, mais c'est un début.
Merci encore  :jap:

n°1590064
bjone
Insert booze to continue
Posté le 23-07-2007 à 12:58:55  profilanswer
 

il faudrait avoir une vision un peu globale.
 
mais non ça me parait pas propre.
 
déjà tes variables et ports doivent être configurables, et si tu as une partie tranport différente, il vaudrait mieux passer par un objet qui s'occupe de ça, avec des primitives qui vont bien.
 
avec par exemple la possibilitée de faire les "deux".
 
style:
 
 

Code :
  1. class Communication_Layer
  2. {
  3. public:
  4.      // primitives de communication
  5.      virtual bool Initialize() = 0;
  6.      virtual bool Send( ..... ) = 0;
  7.      ....
  8. };
  9. class HTTPS_Layer : public Communication_Layer
  10. {
  11. public:
  12.      virtual bool Initialize(); // gnagna init http...
  13.      .....
  14. };
  15. class SIP_Layer : public Communication_Layer
  16. {
  17.      .... idem
  18. };
  19. class ServerEngine
  20. {
  21. public:
  22.     std::vector< boost::shared_ptr<Communication_Layer> > Layers;
  23.     void CreateCommunicationLayers(); // parse un fichier de config et instancie les couches de communication...     
  24. };


 
 
enfin voilà, les trucs figés, c'est très vilain: si tu as plusieurs modes de communication, il vaut mieux réfléchir à créer un objet d'abstraction avec les primitives minimalistes et le masquage de l'implémentation de la communication, et ainsi de pouvoir brasser ce que tu veux avec des communication multiples de natures différentes.
 
bon c'est une idée.
 
après, si tu n'as pas encore la vision des objets clés et de leurs primitives (le choix de bonnes primitives est la clé des perfs et de la souplesse de manière simultannée), tu peux bricoler encore un peu ton truc avec tes compilations conditionnelles, mais si tu pousses ton projet sur un stade avancé ça va être une usine à gaz a maintenir.


Message édité par bjone le 23-07-2007 à 13:01:15
n°1590131
CeD69
Posté le 23-07-2007 à 13:42:02  profilanswer
 

Merci bjone pour ton explication. Je vois bien de quoi tu parles. Et en effet, je n'ai pas de vision assez globale sur le programme de base (basé sur HTTP) pour encapsuler tout ça en classes, surtout que ce programme de base n'est pas du tout programmé comme tel.
Mais c'était une idée intéressante je te l'accorde. Merci bien.
 
Pour continuer dans mon contexte, les protocoles HTTP et SIP sont vraiment similaire (le protocole SIP est basé sur HTTP), donc je me retrouve à effectuer quelques changements. Mon but n'est pas non plus de réaliser une application *propre* maintenant, mais bel et bien de réaliser un prototype en SIP qui fasse à peu prêt comme celui en HTTP.
 
Bon je sais pas si j'ai été clair, mais je pense m'en sortir avec les #def ...

n°1590401
bjone
Insert booze to continue
Posté le 23-07-2007 à 19:12:26  profilanswer
 

pour un proto ça peut faire l'affaire :)


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

  Executer une partie de code ou une autre

 

Sujets relatifs
(Résolu) Masquer une partie d'un calqueManipulations IE6 par le code C++
Modifier les options avancée IE6 par le codeCode pour changer les valeurs dans un shapesheet
executer une application a distance[BATCH/cURL] Selectionner seulement une partie du code
[aide] avec quel langage est codé linux ?Qu'est-ce qui ne vas pas dans mon code php ?
Sauvegarder des paramètres et les utiliser dans un code FortranExécuter une partie de code sur une même page en utilisant un bouton
Plus de sujets relatifs à : Executer une partie de code ou une autre


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