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 :

#define pas pris en compte dans le header


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut #define pas pris en compte dans le header
    Bonjour.

    Je programme sur un arduino (qu'importe)

    dans mon main.cpp je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #define MA_CONST 5
    #include "mauditheader.h"
     
    void main()
    {
      print(MA_CONST); // Je m'attends à lire 5 (lire la suite)
    }
    et dans mon mauditheader.h je met ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #ifndef MA_CONST
    #define MA_CONST 10
    #endif
    Ce que je ne comprends pas, c'est que je fais le #define dans mon fichier source AVANT de faire le include.
    Et pourtant mon header lui pense que je n'ai jamais fais de #define MA_CONST; je ne comprends vraiment pas pourquoi...

    du coup : print(MA_CONST); m'affiche 10 au lieu de m'afficher 5

    pourriez vous s'il vous plait m'expliquer pourquoi et comment faire?

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Cela ne devrait pas se produire. Que se passe-t-il si tu copies le code de l'en-tête directement dans le fichier source ?

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Tu n'aurais pas un autre #include avant le #define MA_CONST 5, qui lui incluerait ton mauditheader.h?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Hello

    Remplace tous les define de MA_CONST par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifndef MA_CONST_GUARD
    #define MA_CONST_GUARD
    static constexpr int MA_CONST = 5;
    #endif
    Et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifndef MA_CONST_GUARD
    #define MA_CONST_GUARD
    static constexpr int MA_CONST = 10;
    #endif
    Puis compile en C++11 : tu verras immédiatement d'où vient le conflit s'il persiste, car une variable ne peut pas être définie deux fois, là ou un #define peut l'être plusieurs fois.

  5. #5
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    +1 jblecanard : Les constantes en #define sont à proscrire en c++. Mais je ne pense pas qu'arduino supporte le c++... si tel est le cas, ce thread n'est pas dans le bon forum

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Ce n'est pas très grave, il peut compiler sur une plateforme "standard" pour identifier le conflit dans le code et reporter la correction sur le code arduino.

Discussions similaires

  1. \s n'est pas pris en compte dans mon regex
    Par xess91 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/03/2010, 17h13
  2. [MySQL] Retour chariot pas pris en compte dans un echo
    Par manu f dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/02/2010, 15h48
  3. Réponses: 10
    Dernier message: 28/01/2010, 12h01
  4. les retours chariots ne sont pas pris en compte dans le textbox
    Par marco62118 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/08/2009, 21h30
  5. Réponses: 1
    Dernier message: 02/12/2008, 21h16

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