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 :

Code compilable sous Windows et Unix


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Code compilable sous Windows et Unix
    Bonjour,

    J'ai développé une application manipulant des fichiers et navigant à travers des repertoires.

    Dû à une bizzarerie d'organisation (environnement de dev sous windows et prod sous Unix... ) j'ai dû dédoubler certaines fonctions (certaines se basant sur opendir, readdir... les autres sur FindFirstFile..)

    Evidement windows.h n'est pas présent en environnement de production et dir.h en environnement de développement.

    Ma question est donc : existe t il une solution élégante pour pouvoir fournir un seul code source compilable sur les deux plateformes sans par exemple commenter la partie spécifique à Unix sous windows et inversement.

    (je n'ai pas accès aux makefile et autres... tous les paramètres devant être gérés dans les codes sources)

    Il m'a semblé en fouinant à droite ou à gauche que les macros pourraient m'aider à résoudre ce problème. Est ce viable ?

    Bref si quelqu'un a une idée je suis preneur

    Merci de votre aide

    Question subsidiaire à titre de culture générale : il y a t il une raison pour que les fonctions de manipulations de repertoires n'aient pas d'implémentation normalisée ? Est ce à l'étude ?

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Tu peux tres bien t'en tirer avec des #ifdef

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifdef WIN32
        #include <windows.h>
    #else
        #include <dir.h>
    #endif
    Enfn apres tu te debrouilles pour mettre ca entre chaque fonction specifique à un systeme.

  3. #3
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Une solution souvent adoptee est d'utiliser les macros, en effet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifdef WINDOWS
    /* code specifique a Windows */
    #elif UNIX
    /* code specifique a Unix */
    #else
    #  error Unknown target.
    #endif
    Le Makefile se charge de definir la constante appropriee au systeme en cours d'utilisation (option -D avec gcc, notamment).

    Pour la normalisation des fonctions systemes, POSIX s'en charge. Mais certains systemes ne sont pas completement compatibles avec cette norme.

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    si tu as la possibilités d'utiliser une bibliothèque, je te conseille la glib.

    Réponse subsidiaire : c'est normal, tous les systèmes qui suportent le C ne disposent pas de système de fichiers utilisant la notion de dossier.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses, problème résolu donc.

    L'utilisation des macros sous cette forme (conditionner toute une fonction) ne m'était pas venu à l'esprit. (Mais a la réflexion la solution semble... évidente ) Me familiariser avec les macros pour la suite me semble être une bonne idée

    @gege2061 : Effectivement j'avais vu cette possibilité, mais je n'ai malheureusement pas le loisir d'utiliser autre chose que l'environnement imposé.

  6. #6
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Points : 718
    Points
    718
    Par défaut
    Je m'excuse d'être puriste mais il s'agit de constantes de compilation pas de macros (#define).

  7. #7
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Citation Envoyé par Bayard
    Je m'excuse d'être puriste mais il s'agit de constantes de compilation pas de macros (#define).
    Les constantes sont des macros d'arité 0.

  8. #8
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par xzed
    J'ai développé une application manipulant des fichiers et navigant à travers des repertoires.

    Dû à une bizzarerie d'organisation (environnement de dev sous windows et prod sous Unix... ) j'ai dû dédoubler certaines fonctions (certaines se basant sur opendir, readdir... les autres sur FindFirstFile..)
    opendir(), readdir() etc. sont POSIX.1 et disponibles avec MinGW sous Windows. Installe Code::Blocks...

  9. #9
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Bayard
    Je m'excuse d'être puriste mais il s'agit de constantes de compilation pas de macros (#define).
    Bah, un vrai puriste aurait dit 'directive de compilation conditionelle'...

  10. #10
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Non !
    Exact, faute d'inattention. Je corrige...

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/03/2012, 11h51
  2. Compiler du code Pascal sous Windows en .so (Java)
    Par obione dans le forum Pascal
    Réponses: 4
    Dernier message: 04/05/2010, 18h29
  3. Compilation sous windows avec devc++
    Par dr_octopus74 dans le forum Dev-C++
    Réponses: 4
    Dernier message: 17/01/2007, 23h48
  4. Norme POSIX sous Windows et Unix
    Par Franck.H dans le forum Langages de programmation
    Réponses: 9
    Dernier message: 10/10/2005, 21h46

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