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 :

Fixer la tailler d'un tableau statique en fonction d'une condition


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 19
    Par défaut Fixer la tailler d'un tableau statique en fonction d'une condition
    Bonjour à tous,

    Dans un fichier Entree.h je définis une variable nommée Nr de type int.
    J'inclus ensuite Entrer.h dans un autre fichier nommée Principal.h.

    Dans Principal.h j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    #include "Entree.h"
    #include<math.h>
    #include <stdlib.h>
     
    #if ( (Nr%2) == 0 ) 
        #undef Nbr_element 
        #define Nbr_element  10
    #esle
        #undef Nbr_element
        #define Nbr_element  20
    #endif 
     
     
    untype unefonction {
     
       double Area[Nbr_element]; 
       /*...*/
    }
    Mon problème est que Nbr_element vaut systématiquement 10, quel que soit la parité de Nr.

    J'ai l'impression que le Nr utilisé dans n'est pas le Nr défini dans Entree.h.

    Quelqu'un pourrait-il m'aider, s'il vous plait?

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 498
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Ton code ressemble t-il au final à cet exemple simple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int Nr = 42;
     
    #if (Nr == 42)
    #warning Nr vaut 42
    #else
    #warning Nr vaut autre chose
    #endif
    Si, oui, alors il te faudra trouver une autre méthode. En effet, le préprocesseur ne regarde pas les variables (les vraies variables, celles manipuler par le compilateur). Ici, il cherche une macro nommée Nr et n'en trouve pas, donc il remplace Nr par 0. Le test donc toujours faux et tu auras toujours le second warning.

    Le code suivant devrait être mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #define NR_PREPROCESSEUR    42
    int Nr = NR_PREPROCESSEUR;
     
    #if (NR_PREPROCESSEUR == 42)
    #warning Nr vaut 42
    #else
    #warning Nr vaut autre chose
    #endif

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 19
    Par défaut
    Bonjour,

    J'ai écrit cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #define NR_PREPROCESSOR Nr 
     
    #if ( (NR_PREPROCESSOR%2) == 1)
    	#undef Nbr_element
    	#define Nbr_element  Ns * Nt + Ns *  ( Nr + 1 ) + Ns * Ng
    #endif
     
    #if ( (NR_PREPROCESSOR%2) == 0 ) 
    	#undef Nbr_element
    	#define Nbr_element  Ns * Nt + Ns *  Nr + Ns * Ng
    #endif
    Mais c'est comme si NR_PREPROCESSOR été égal à 0 donc quel que soit la valeur de Nr je me trouve dans le cas pair. Lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     printf("NR_PREPROCESSOR = %i\n",NR_PREPROCESSOR);
    J'ai bien la valeur correspondant à Nr qui s'affiche.

    Par contre, à la place de la première ligne si j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define NR_PREPROCESSOR 1
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define NR_PREPROCESSOR 2
    Cela fonctionne et ça prend bien en compte le test de parité donc ce n'est apparemment pas un problème de modulo.

  4. #4
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    je pense que la réponse se trouve au dessus
    Citation Envoyé par Bktero Voir le message
    ,

    Si, oui, alors il te faudra trouver une autre méthode. En effet, le préprocesseur ne regarde pas les variables (les vraies variables, celles manipuler par le compilateur). Ici, il cherche une macro nommée Nr et n'en trouve pas, donc il remplace Nr par 0. Le test donc toujours faux et tu auras toujours le second warning.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 19
    Par défaut
    Ok merci.

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

Discussions similaires

  1. Tri tableau HTML en fonction d'une colonne et ses valeurs.
    Par hugerma dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/12/2014, 09h04
  2. Réponses: 5
    Dernier message: 04/02/2014, 11h52
  3. Réponses: 15
    Dernier message: 16/09/2009, 17h19
  4. Réponses: 7
    Dernier message: 02/07/2008, 17h06
  5. Réponses: 2
    Dernier message: 16/11/2007, 10h59

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