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

Arduino Discussion :

const & #define


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut const & #define
    Salut,

    Que préférerez-vous entre const int RougePin = 9; et #define RougePin 9 ?

    Merci.

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 885
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const byte pinLedRouge = 9; // ou uint8_t au lieu de byte si vous voulez rester dans le standard
    un int c’est deux ou 4 octets... et une valeur numérique seule (le define) est aussi par défaut un int.
    Ça permet au compilateur de faire des optimisations (et le camelCase est plutôt le standard dans le codage arduino)

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Ok merci.

    Oui dans ce cas effectivement avec byte on consomme 1 octet au lieu de 2 ou 4 donc c'est mieux...

    Mais qu'en est-il dans le où on aurait un int ? La consommation mémoire est la même ?

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 885
    Par défaut
    Tout dépend comment vous utilisez la constante. C’est un int donc 2 ou 4 octets suivant la plateforme en théorie, mais lorsqu’on compile il y a une phase d’optimisation et si le compilateur arrive à voir qu’il peut directement utiliser la valeur sur un octet alors il n’y aura pas de gain visible une fois compilé.

    Autant ne pas prendre de "risque" et aider le compilateur en lui donnant le bon type directement.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Encore merci.

    Oui effectivement autant ne pas prendre de "risque"...

    PS : D'ailleurs je me demande si le fait de préciser que c'est une constante change vraiment quelque chose ???

  6. #6
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 885
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    PS : D'ailleurs je me demande si le fait de préciser que c'est une constante change vraiment quelque chose ???
    oui parce qu'il va d'une part vérifier que vous ne changez jamais sa valeur (évite des bugs) et d'autres part il peut prendre la décision de mettre (en assembleur) directement la valeur dans les opérations adaptée (charger un registre directement par exemple) puisqu'elle tient sur un octet et qu'il est sûr qu'elle ne changera pas.

    Sans const, par le biais d'un pointeur ou d'opérations mémoire vous pouvez aller modifier la valeur et donc le compilateur n'a pas le droit de mettre directement la valeur, il faut qu'il aille la chercher d'abord en mémoire --> c'est plus long et ça mange de la mémoire.

Discussions similaires

  1. C | static | extern | const | define
    Par Magnum8760 dans le forum C
    Réponses: 1
    Dernier message: 20/04/2019, 23h06
  2. static const, namespace ou #define ?
    Par Awakening dans le forum Langage
    Réponses: 10
    Dernier message: 21/10/2011, 11h02
  3. problème avec const char * et #define macro
    Par CodeurNé dans le forum C
    Réponses: 5
    Dernier message: 20/09/2006, 21h25
  4. Différences entre #define et const
    Par Tittom dans le forum C
    Réponses: 19
    Dernier message: 01/06/2006, 13h48
  5. [const] #define vs const
    Par Mokhtar BEN MESSAOUD dans le forum C
    Réponses: 34
    Dernier message: 22/12/2005, 17h46

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