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 :

Bloquer une fonction suivant l'OS


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 83
    Points : 68
    Points
    68
    Par défaut Bloquer une fonction suivant l'OS
    Bonjour,

    J'ai crée un programme qui fonctionne correctement sur Windows. Maintenant je souhaiterais le rendre aussi compatible sur linux.

    Une partie (non capitale) de mon programme change la couleur des lignes sous MSDOS en fonction du résultat. Pour ce faire j'ai fait un #include <windows.h>
    Bien entendu ceci ne fonctionne pas sous linux et me génère une erreur lors de la compilation sous linux.

    Je souhaiterais autoriser l'include et les fonctions que j'ai crée et qui en dépendent uniquement si L'OS du système est Windows.

    J'ai cherché sur internet mais je n'ai encore rien trouvé me permettant de le faire. Connaitriez vous la syntaxe me permettant de bloquer des parties de mon programme en fonction de l'OS ?

  2. #2
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Bonjour,

    quel compilateur utilises-tu ? utilises-tu un outil du genre autotools ?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 83
    Points : 68
    Points
    68
    Par défaut
    J'utilise juste GCC comme compilateur et codeblocks ou sublime text 2 pour écrire mon code

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    N'ayant pas la motivation de me paraphraser, je te renvoie ici : https://gradot.wordpress.com/2012/01...onditionnelle/

  5. #5
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    GCC propose un mécanisme qui va te permettre de faire de la compilation conditionnelle. En gros c'est comme s'il y avait un #define __WIN32__ 1 quand tu compiles sous windows et un #define __linux__ 1 quand tu compiles sous linux.

    Tu peux donc isoler certaine partie du code ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #if defined(__WIN32__)
    la partie windows
    #elif defined(__linux__)
    la partie linux
    #else
    #  error Plateforme non supportée
    #endif
    Cela peut ne pas être très pratique, le code doit être pensé en conséquence. Tu auras sans doute d'autres problèmes si tu essayes de rendre ton code portable entre linux et win32, comme par exemple la gestion des chemins de fichiers, certaines finctions qui sont totatlement différentes, etc ... (cf les sockets portables)

    Tu pourras trouver la listes des defines par OS sur le net (cf le post de bktero), ou plus simplement en exécutant la commade echo "" | cpp -dD dans une console.

    Si tu en as le courage, tu peux essayer de te frotter à autotools qui te simplifiera la vie si tu veux pousser la portabilité de ton soft plus loin (il va te falloir de la motivation néanmoins surtout si tu es habitué à windows/code::blocks).

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 83
    Points : 68
    Points
    68
    Par défaut
    Merci pour vos réponse, mon programme compile correctement maintenant sur linux.

    Il y a t-il une différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #if defined(__WIN32__)
    #ifdef _WIN32
    #ifdef WIN32
    Ou bien ce sont 3 syntaxes faisant la même chose ?

  7. #7
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    #ifdef XXX et #if defined(XXX) sont strictement équivalents. L'utilité de defined est que l'on peut en utiliser plusieurs comme dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #if defined(__linux__) && defined(__GNUC__)
    .
    Pour plus d'information il y a la doc du préprocesseur de gcc : Conditional syntax - Defined

    En revanche il y a une différence entre __WIN32__, _WIN32 et WIN32 : ils peuvent ne pas tous être définis suivant le compilateur par exemple. C'est pourquoi il est important de vérifier avant (la commande que je t'ai donné précedemment) ou d'utiliser un outil qui le fasse pour toi.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 83
    Points : 68
    Points
    68
    Par défaut
    Entendu, merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/11/2007, 11h21
  2. Bloquer une fonction
    Par candelwick dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/11/2006, 14h27
  3. [VB.NET] Fonction suivant une valeur
    Par chatainsim dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/07/2006, 23h19
  4. Réponses: 8
    Dernier message: 29/06/2006, 14h54
  5. Réponses: 7
    Dernier message: 17/05/2006, 14h49

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