IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Fonction de meme nom - Librairies et effet differents


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Par défaut Fonction de meme nom - Librairies et effet differents
    Voila je cherche a realiser des ETL en C dans le cadre d'un projet. Mais je seche sur un pepin de conception.

    Mettons que j'ai deux librairies de ma confection : libCSV.so et libODS.so (au hasard) et que dans chacune d'elle j'ai une fonction helloworld qui n'a pas le meme contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // pour l'ods lib
    void print_helloworld(void){
    printf("helloworld de l'ODS");
    }
    // pour la csv lib
    void print_helloworld(void){
    printf("helloworld de la CSV");
    }
    Et mettons aussi que je veuille dans un cas appellé la premiere puis juste apres la seconde. Comment je dis ca au programme ? "utilise celle de csv d'abord et apres celle de ods"?

    A terme en fait dans chacune de mes librairies il y aurait deux fonctions genre : parse_file(struct, char*, int) et write_file(struct,char*,int). Chacune des librairies permettant donc le parsage et l'ecriture d'un type de fichier en particulier. Et comme ca, ca permet si jamais je veux faire evoluer le truc a rajouter une librairie avec ces deux methodes pour le type en question.
    Sachant que dans mon main j'ai de quoi savoir quel est le type de fichier en entrée et en sortie.

    Si quelqu'un a une idée ou une meilleure piste a suivre...

    [-mod- Merci de lire les règles du forum et d'apprendre à utiliser les balises de code]

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jovic
    Mettons que j'ai deux librairies de ma confection : libCSV.so et libODS.so (au hasard) et que dans chacune d'elle j'ai une fonction helloworld qui n'a pas le meme contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // pour l'ods lib
    void print_helloworld(void){
    printf("helloworld de l'ODS");
    }
    // pour la csv lib
    void print_helloworld(void){
    printf("helloworld de la CSV");
    }
    Dans un même projet, le nom des fonctions doit être unique, sinon le comportement est indéterminé.

    Je suggère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // pour l'ods lib
    void ods_print_helloworld(void)
    {
       printf ("helloworld de l'ODS\n");
    }
    // pour la csv lib
    void csv_print_helloworld(void)
    {
       printf ("helloworld de la CSV\n");
    }
    tout simplement.

  3. #3
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Avec un brin de dynamisme cela doit être possible cependant la solution d'emmanuel est plus indiqué je trouve et moins soumis à l'erreur.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Par défaut
    Un brin de dynamisme?

    La solution ne me conviens pas l'idée étant que si jamais je veuille rajouter le traitement de fichier mettons xls, les seuls rajouts devront etre :

    1. faire une librairie "libxls" avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void print_helloworld(void){
      printf("helloworld du XLS");
    }
    2. une ligne dans un fichier de conf indiquant que pour xls faut utiliser telle librairie.

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Oui enfin le dynamisme est possible si ce ne sont pas des librairies que tu lies statiquement sinon en chargeant la bibliothéque partagée tu peux récupérer ensuite un pointeur de fonction sur celles qui t'intéressent puis l'executer

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Par défaut
    Bon va falloir que je me trouve un tuto moi...
    merci

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jovic
    Un brin de dynamisme?
    pointeurs de fonctions...
    La solution ne me conviens pas l'idée étant que si jamais je veuille rajouter le traitement de fichier mettons xls, les seuls rajouts devront etre :

    1. faire une librairie "libxls" avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void print_helloworld(void){
      printf("helloworld du XLS");
    }
    2. une ligne dans un fichier de conf indiquant que pour xls faut utiliser telle librairie.
    Si l'usage des 2 bibliothèques est exclusif, tu peux utiliser le même nom. Mais si les 2 bibliothèques sont liées dans le même projet, les noms doivent être différents.

    Maintentant, si tu sais ce que tu fait, tu peux utiliser des macros qui seront traduites de telle ou telle façon selon des options de compilations particulières. Ca va vite devenir une usine à gaz, et je ne préfère pas donner de solution dans ce sens...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/01/2012, 22h21
  2. Réponses: 4
    Dernier message: 31/12/2010, 16h24
  3. [XSD] Eléments avec même nom et attributs différents
    Par stanware dans le forum Valider
    Réponses: 3
    Dernier message: 24/06/2008, 17h44
  4. Réponses: 2
    Dernier message: 07/06/2008, 15h05
  5. [batch] Meme nom ds rep differents
    Par freemanbubu dans le forum Windows
    Réponses: 1
    Dernier message: 27/03/2007, 10h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo