Partage
  • Partager sur Facebook
  • Partager sur Twitter

constexpr et embarqué C++

C++

    2 février 2019 à 23:05:07

    Bonjour OC,

    lorsqu'il est question de C++ avec constexpr, on parle des applications à la programmation embarquée.

    Or je vois souvent des intitulés de formation C embarqué, mais je n'ai pas vu de formation C++ embarqué.

    Avant d'en venir à constexpr dans la suite du fil, y'a-t-il un livre de C++ embarqué "pur", que vous pourriez conseiller , utilisant la carte Nucléo STM32 pour les illustrations ?

    Le cours de C embarqué de OC utilise une carte Nuclé STM32.

    https://openclassrooms.com/fr/courses/4117396-developpez-en-c-pour-lembarque

    Merci par avance

    -
    Edité par pseudo-simple 2 février 2019 à 23:07:35

    • Partager sur Facebook
    • Partager sur Twitter
      2 février 2019 à 23:36:03

      Aucun rapport particulier entre l'embarqué et constexpr.

      Il y a plusieurs livres sur le C++ embedded. Un livre récent (que je n'ai pas lu) : https://www.amazon.com/Real-Time-Efficient-Object-Oriented-Microcontroller-Programming/dp/3662567172 

      Voir aussi Dan Saks : https://www.youtube.com/watch?v=D7Sd8A6_fYU 

      Les STM32 (comme beaucoup de microcontroleur) propose un compilateur C++ (c'est d'ailleurs souvent GCC). 

      Mais je ne suis pas dev embarqué, d'autres auront probablement plus d'infos.

      -
      Edité par gbdivers 2 février 2019 à 23:36:52

      • Partager sur Facebook
      • Partager sur Twitter
        2 février 2019 à 23:41:30

        Je vous remercie pour la référence amazon.

        Il y a un gros rapport entre l'embarqué C++ et constexpr.

        Je vous invite à feullleter virtuellement la référence que vous m'avez envoyée sur amazon

        C'est assez éloquent.

        • Partager sur Facebook
        • Partager sur Twitter
          3 février 2019 à 0:00:29

          Non, ce n'est pas spécifique a l'embarqué. Pas plus que n'importe quelle fonctionnalité du C++ qui permet d'optimiser. Et pas plus spécifique a l'embarqué que tous les autres domaines qui veulent des perfs.

          Dit autrement, constexpr est aussi utile dans l'embarqueé que dans les autres domaines. Et les autres fonctionnalités du C++ sont aussi utile que constexpr dans l'embarqué.

          -
          Edité par gbdivers 3 février 2019 à 0:02:52

          • Partager sur Facebook
          • Partager sur Twitter
            7 février 2019 à 13:01:05

            Bonjour OC,

            encore dans le cadre de constexpr, j'au été amené à lire par curiosité, un morceau de code sur internet où on voyait un constructeur par défaut déclaré constexpr.

            Est-ce que un constructeur par défaut déclaré constexpr signifie qu'une instance créé à partir de ce constructeur par défaut, sera automatiquement constexpr ?

            même si on a fait :

            T a;

            Est-ce que dans ce cas particulier l'objet a sera constexpr ?

            Merci

            -
            Edité par pseudo-simple 7 février 2019 à 16:19:17

            • Partager sur Facebook
            • Partager sur Twitter
              7 février 2019 à 15:52:32

              Ca veut dire quoi "un objet est constexpr" ???
              • Partager sur Facebook
              • Partager sur Twitter
                7 février 2019 à 16:21:30

                @gbidvers  : C'est écrit dans le livre de Mr Scott Meyers, page 95, version française et page 97 version anglaise.

                Quelqu'un peut-il m'aider ?

                Par avance merci

                -
                Edité par pseudo-simple 7 février 2019 à 17:08:21

                • Partager sur Facebook
                • Partager sur Twitter
                  7 février 2019 à 16:49:36

                  J'ai pas le bouquin.

                  Le constructeur est constexpr, l'objet est juste initialisé pré-compile ?

                  -
                  Edité par LilyKianii 7 février 2019 à 16:57:34

                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 février 2019 à 19:12:02

                    En effet. Il parle d'objet pour parler des variables qui sont constexpr. Détail sémantique. (La différence entre "variable" et "object" est un peu subtile et "object" ne doit pas être pris au sens de la POO. D'ailleurs, il utilise "int" dans son example).

                    Le texte en question :

                    But let’s begin with constexpr objects. Such objects are,
                    in fact, const, and they do,
                    in fact, have values that are known at compile time.(Technically, their values are
                    determined during translation, and translation consists
                    not just of compilation but
                    also of linking. Unless you write compilers or linkers for
                    C++, however, this has no
                    effect on you, so you can blithely program as if the 
                    values of constexpr objects were
                    determined during compilation.)

                    Pour en revenir a la question...

                    YES, man a écrit:

                    Est-ce que un constructeur par défaut déclaré constexpr signifie qu'une instance créé à partir de ce constructeur par défaut, sera automatiquement constexpr ?

                    même si on a fait :

                    T a;

                    Est-ce que dans ce cas particulier l'objet a sera constexpr ?

                    Tu sais (ou tu devrais savoir) écrire une classe avec un constructeur par défaut constexpr. Tu sais écrire une variable qui n'est pas constexpr.

                    Du coup, en quoi tu as besoin de nous pour cette question ? Ecris des codes de test et tu verras. C'est un code qui prend 10 lignes.

                    -
                    Edité par gbdivers 7 février 2019 à 19:13:06

                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 février 2019 à 21:49:06

                      struct zeta
                      {
                          char a;
                          constexpr zeta() : a{ 0 } {};
                      };
                      
                      int main()
                      {
                          constexpr zeta cx_z;
                          static_assert(cx_z.a == 0);
                          
                          zeta z;
                          static_assert(z.a == 0);
                      }
                      Regarde ce que dit le compilateur
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 février 2019 à 22:20:03

                        Il ne faut pas écrire le code a la place des gens...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 février 2019 à 5:18:41

                          @ads00 : merci pour votre aide. Je n'avais pas idée comment faire et vous avez débloqué la situation. Et grâce à votre message, j'ai été amené à passer l'option -std=c++17  pour activer ce standard sur codebloks.

                          Si je comprends bien, dès que le constructeur est déclaré constexpr, alors l'objet est automatiquement constexrp  même si les autres membres de la classe de sont pas constexpr ?

                          puisque le code n'accepte pas la seconde déclaration pour :

                          zeta z;

                          ?

                          @Ads00 : Je suis de bonne volonté, donc n'hésitez pas à écrire le code "à place des gens" quand ceux-ci  sont bloqués et qu'ils n'ont pas l'idée pour le faire. Sans cela, je serais resté sans réponse

                          -
                          Edité par pseudo-simple 8 février 2019 à 5:47:42

                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 février 2019 à 6:07:35

                            YES, man a écrit:

                            puisque le code n'accepte pas la seconde déclaration pour :

                            zeta z;

                            ?

                            @Ads00 : Je suis de bonne volonté, donc n'hésitez pas à écrire le code "à place des gens" quand ceux-ci  sont bloqués et qu'ils n'ont pas l'idée pour le faire. Sans cela, je serais resté sans réponse

                            Le compilateur accepte sans aucun problème cette syntaxe. Et cette syntaxe est valide aussi en C++11 (excepté sur 1 détail, qui n'a aucune rapport avec constexpr)

                            Ca veut dire que tu n'as pas pris le temps de copier-coller ce code dans un éditeur et le compiler. Ou de lire les messages qui s'affichent et d'essayer de comprendre.

                            Arrêtes de dire que tu fais des recherches et que tu bosses, ça se voit que ce n'est pas le cas. Tu n'es pas de bonne volonté, tu es faignéant et tu attends qu'on fasse tout le boulot à ta place. C'est pour cela que tu poses autant de question.

                            Et c'est pour cela que tu ne comprends rien.

                            EDIT :

                            Et pour éviter que tu sortes encore des anneries en disant que je suis trop méchant et que tu as testé cette dernière syntaxe, voilà ce que dit un compilateur :

                            Aucune erreur !

                            Si tu avais réellement testé ce code, tu n'aurais pas poser cette question. Tu aurais peut etre posé d'aurtes questions et on t'aurais aidé, parce que tu aurais bossé par toi même. Mais la question que tu poses prouves que tu as rien fait.

                            -
                            Edité par gbdivers 8 février 2019 à 6:14:45

                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 février 2019 à 8:26:01

                              YES, man a écrit:

                              Si je comprends bien, dès que le constructeur est déclaré constexpr, alors l'objet est automatiquement constexrp  même si les autres membres de la classe de sont pas constexpr ?

                              Un constructeur constexpr permet de créer des instances constexpr, ça ne rend pas automatiquement les objets constexpr. Il suffit juste de faire les tests avec le code fourni par Ads00.

                              C'est bien beau de demander des codes tout fait, mais si même là vous ne prenez pas le temps de les essayer correctement, on va difficilement pouvoir continuer à vous aider. Les efforts sur un forum doivent marcher dans les deux sens.

                              C'est comme demander à un professeur particulier de faire ses devoirs à sa place. Est-il là pour ça ? Non, il doit simplement aider l'autre, pas tout faire à sa place. Est-ce votre encadrant de thèse qui a écrit le manuscrit à votre place ? Est-ce son but ? Et bien ici c'est pareil. J'espère que vous comprenez ça quand même.

                              Comment voulez-vous être embauché ensuite ? Si vos collègues doivent vous pré-mâcher le travail. Et c'est pas en avalant tous les bouquins de C++ de la terre que ça arrangera quelque chose, c'est un problème de méthode de travail.

                              -
                              Edité par Maluna34 8 février 2019 à 9:12:49

                              • Partager sur Facebook
                              • Partager sur Twitter
                                8 février 2019 à 21:39:07

                                https://en.cppreference.com/w/cpp/language/constexpr
                                Lis ton livre, lis la doc, puis fais des tests en écrivant du code et vérifier que tu as compris.

                                Et comme dit gbdivers, lis le ce que te dit le compilateur. Si tu ne comprends pas ce que fait static_assert, pareil lis la doc : https://en.cppreference.com/w/cpp/language/static_assert

                                Il ne suffit pas de se dire ça compile ou ça compile pas.

                                Ca prend du temps d'apprendre, il faut écrire du code pour bien comprendre, lire c'est pas suffisant.

                                • Partager sur Facebook
                                • Partager sur Twitter

                                constexpr et embarqué C++

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown