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 :

C++ Arduino et signature de méthodes


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de pcdwarf
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2010
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 269
    Par défaut C++ Arduino et signature de méthodes
    On peut lire ici : https://www.arduino.cc/reference/en/.../serial/print/



    Serial.print(78) gives "78"

    Serial.print(1.23456) gives "1.23"

    Serial.print('N') gives "N"

    Sauf que "normalement" en c/c++ une valeur immédiate comme 78 est de type const int
    et 'N' est de type const char

    or, sur AVR 8bit, les 2 types sont équivalents à const int8_t

    du coup comment la méthode print fait-elle pour différencier entre les deux ?

    Ou alors cela ne fonctionne que sur les plateformes 16 bits ou + ?


    Note : C'est une question théorique/académique qui m'est venu en lisant la doc. J'ai pas la plateforme de test sous la main.

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 196
    Billets dans le blog
    47
    Par défaut
    En passant par la surcharge des fonctions je suppose... Voir Qu'est-ce que la surcharge ?

    Extrait ArduinoCore-avr/cores/arduino/Print.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    size_t print(const __FlashStringHelper *);
        size_t print(const String &);
        size_t print(const char[]);
        size_t print(char);
        size_t print(unsigned char, int = DEC);
        size_t print(int, int = DEC);
        size_t print(unsigned int, int = DEC);
        size_t print(long, int = DEC);
        size_t print(unsigned long, int = DEC);
        size_t print(double, int = 2);
        size_t print(const Printable&);

  3. #3
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    exactement, c'est le typage formel du paramètre (même si en implémentation c'est équivalent) qui va (par le biais donc de la signature et des promotions automatiques) décider quelle est la fonction membre à appeler.

    Serial.print(78); correspond à la signature size_t print(int, int = DEC);

    et

    Serial.print('N'); correspond à la signature size_t print(char);
    ---
    sinon sur le point
    or, sur AVR 8bit, les 2 types sont équivalents à const int8_t
    non ce n'est pas le cas. une valeur littérale comme 78 est promue par défaut en const int, soit 2 octets sur AVR (const int16_t) ou 4 octets sur architecture 32 bits (const int32_t)

    si vous faites un Serial.println(sizeof 78); vous verrez 2 donc sur votre AVR

  4. #4
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 628
    Par défaut
    Bonjour,

    En complément, le retour de fonction (size_t par exemple) ne fait pas partie de la signature d'une fonction, seuls les types des arguments passés (fussent ils par défaut) y participent.

    Saluitations

  5. #5
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Bon point effectivement (comme d’hab) !!

  6. #6
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 628
    Par défaut Sans fôte
    Bonjour Jay,

    Citation Envoyé par Jay M Voir le message
    ...comme d’hab...
    Merci. Cela me mettra du baume au cœur à la prochaine bêtise que j'écrirais

    Salut

  7. #7
    Membre éclairé Avatar de pcdwarf
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2010
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 269
    Par défaut
    mystère éclairci
    merci bcp!

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

Discussions similaires

  1. signature des méthodes pour les sélecteurs
    Par patricerapaport dans le forum Swift
    Réponses: 0
    Dernier message: 30/08/2017, 08h55
  2. Signature des méthodes redéfinies
    Par Yiempia dans le forum Langage
    Réponses: 18
    Dernier message: 03/10/2013, 17h41
  3. Signature de méthode et héritage
    Par rigolocrabe dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2009, 22h17
  4. Signatures des méthodes
    Par szdavid dans le forum Général Python
    Réponses: 4
    Dernier message: 28/01/2006, 11h59
  5. Réponses: 3
    Dernier message: 06/10/2005, 15h21

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