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 :

tester un #define


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Par défaut tester un #define
    Bonjour à tous,

    Je travaille sur un projet en C avec des matrices d'entiers, de flottants, ou de doubles.
    Je suis parti sur une solution assez simple qui marche très bien.

    Le problème vient de l'affichage de la matrice, selon le type on aura %d, ou %f.

    Du coup je cherche à faire un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(TYPE est un int) printf("......."); // %d
    else printf("........."); // %f
    Comment puis-je tester ma macro TYPE ?

    Merci de vos réponses

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    La solution la plus propre devrait être, je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #define TYPE int
     
    #if TYPE == int
        #define TYPE_PRINT %d
    #else if TYPE == machin
    #else
        #warning Type inconnu 
    #endif
     
    sprintf(format, "dsdsd%sdsds", TYPE_PRINT);
    printf(format, argument);
    printf(TYPE_PRINT, argument);
    (Je n'ai pas testé mais la solution devrait y ressembler).

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 473
    Par défaut
    Bonjour,

    il existe les macros associées #ifdef et #ifndef pour savoir si d'autres macros sont en soi définies ou non, ainsi que #if et #else qui permettent d'évaluer des conditions à la compilation. Toutes ouvrent un bloc qui est refermé par #endif.

    Sur le plan symbolique, tu peux tout-à-fait écrire

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #if TYPE == int
        printf("......."); // %d
    #else
        printf("......."); // %d
    #endif

    … mais soit averti que le compilateur C va alors choisir le bloc adéquat en fonction de l'expression passée à #if et que l'autre sera complètement ignoré. Le test en lui-même n'apparaîtra pas dans ton exécutable final.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Par défaut
    Merci pour vos réponses, c'était très clair.

    J'ai opté pour la 2e solution puisque je la trouve plus claire et comme le dis mon VDD, cela m'arrange niveau taille du code que le bloc non concerné par le type soit ignoré.

    Pour ceux qui veulent le code final si certain sont confronté au même problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [...]
    #if TYPE == int
    	printf("%d ", matrice[i][j]);
    #elif TYPE == float || TYPE == double
    	printf("%f ", matrice[i][j]);
    #endif
    [...]
    A bientôt !

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 473
    Par défaut
    Merci pour le retour mais tu devrais quand même te pencher sur le conseil de Neckara, à savoir définir une fois pour toutes le format de ton printf dans ton bloc, au départ, plutôt que faire de la compilation conditionnelle à chaque fois que tu devras écrire quelque chose à l'écran.

    Sache également que la chaîne du format de printf n'a pas nécessairement besoin d'être une constante. Tu peux très bien te faire un tableau de chaînes à indexer en fonction de la situation, ce qui te permettra de manipuler sans t'en soucier des matrices de différents types au sein du même programme.

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

Discussions similaires

  1. Peut on tester l'existence d'un fichier ?
    Par Alamassepointcom dans le forum Flash
    Réponses: 2
    Dernier message: 10/10/2002, 12h10
  2. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 11h54
  3. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 09h51
  4. [ADO] Tester l'existence d'une table
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/09/2002, 13h55
  5. Tester connexion Internet active sous Windows
    Par Altau dans le forum Développement
    Réponses: 3
    Dernier message: 12/08/2002, 12h43

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