Partage
  • Partager sur Facebook
  • Partager sur Twitter

Faire un cout sans iostream ou d’autres libraires

    16 avril 2019 à 21:01:42

    Salut je voudrais savoir si il était possible d’afficher un message sans inclure de librairies ou au moins iostream??
    • Partager sur Facebook
    • Partager sur Twitter
      16 avril 2019 à 21:05:15

      Salut,

      printf("Hello World !");

      Sauf que c'est du C et pas du C++.

      Pourquoi tu veux faire ça en fait ? 

      • Partager sur Facebook
      • Partager sur Twitter
        16 avril 2019 à 21:11:19

        A ok desole j’avais pas trop pensé à ça et la fonction cin tu sais?

        Et pour repondre a y’a question je sais pas c’est juste des question comme ca parce que la librairie iostream m’intrigue.

        • Partager sur Facebook
        • Partager sur Twitter
          16 avril 2019 à 21:15:58

          Oups, en fait j'ai peut-être mal compris ta question initiale. Tu disais que tu ne voulais pas utiliser iostream, ou l'inverse ?

          Comment ça la librairie iostream t'intrigue ?

          • Partager sur Facebook
          • Partager sur Twitter
            16 avril 2019 à 21:20:27

            Je ne voulais pas utiliser iostream et elle m’intrigue car je ne vois pas comment elle arrive à faire un cout par exemple. En assembleur j’arrive a voir mais juste avec un cout pas trop.

            -
            Edité par Cencoremoi 16 avril 2019 à 21:27:32

            • Partager sur Facebook
            • Partager sur Twitter
              16 avril 2019 à 21:32:24

              Qu'est ce que tu ne comprends pas avec cout ? Parce que si tu comprends mieux l'assembleur, tu m'inquiètes. :o
              • Partager sur Facebook
              • Partager sur Twitter
                16 avril 2019 à 21:41:39

                Vas avec cout on voit pas vraiment ce qui ce passe dans les registres en même temps c’est le but du c++. Est ce que cout est code en assembleur ou cin?

                Le c++ a une syntaxe de base et est ce que cout en fait partie ?

                Desolé pour toutes ces questions, je suis pas encore un pro. En tout cas merci pour tes réponses!!

                • Partager sur Facebook
                • Partager sur Twitter
                  16 avril 2019 à 21:47:57

                  Il y a beaucoup de chose entre std::cout et l'affichage proprement dit. Notamment la couche d'abstraction des flux qui va entre autre faire un dispatch statique en fonction du type, faire passer les données par des buffers, etc. C'est pas super intéressant en réalité. Et à terme de toute façon, cette partie est amenée à être remplacée par une nouvelle lib de formatage.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                    16 avril 2019 à 21:49:27

                    Pourquoi ça te préoccupe autant de savoir comment la bibliothèque standard fonctionne ? std::cout est une instance globale de std::ostream. Après, comment ça fonctionne, j'en ai aucune idée et je m'en fiche pas mal, en fait. 

                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 avril 2019 à 21:53:17

                      A ok et ducoup iostream est code en c++ et pas en assembleur? Et sinon c’est de la curiosité quoi de savoir comment est ce que un processeur ça marche ou des trucs comme ça

                      -
                      Edité par Cencoremoi 16 avril 2019 à 21:57:16

                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 avril 2019 à 22:09:43

                        <iostream> fait partie de la bibliothèque standard qui est codée en C et C++. Mais je suis loin d'être un expert en la matière, en fait j'ai aucune idée de comment ça marche au fond. Si tu veux savoir tout sur la bibliothèque standard, tu peux lire ce document en entier. 

                        -
                        Edité par Raynobrak 16 avril 2019 à 22:10:40

                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 avril 2019 à 22:16:08

                          TiboTiboTibo a écrit:

                          A ok et ducoup iostream est code en c++ et pas en assembleur? Et sinon c’est de la curiosité quoi de savoir comment est ce que un processeur ça marche ou des trucs comme ça

                          Ce beaucoup de C++, puis ça dépend aussi des libs de l'OS, souvent faites en C, puis dans le fond de ça, on doit trouver de l'assembleur. Bref, il y a beaucoup de code dans l'histoire.

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                            17 avril 2019 à 10:02:05

                            Salut,

                            Déjà, iostream n'est pas en lui-même une bibliothèque :  c'est un fichier d'en-tête qui, pour être complet, regroupe le fichier istream (Input Stream : flux d'entrée) et ostream (Output Stream : flux de sortie), qui fournissent (au travers de fichiers spécifiques au compilateur) les classes template std::basic_istream (dont une spécialisation fournit std::istream pour le "flux d'entrée standard") et std::basic_ostream (dont une spécialitation fournit std::ostream pour "le flux de sortie standard"), ainsi qu'une instance globale (std::cin, généralement associé au clavier, mais qui correspond en réalité au "système d'entrées standard" et std::cout, généralement associée à la console / à l'écran / à l'affichage de manière générale, mais qui correspond en réalité au "système de sortie standard").

                            Ensuite, comme l'a si bien dit Ksass ` Peuk, ces notions sont des abstractions, un peu à l'instar de la structure FILE du C: Leur but est de permettre au développeur qui les utilise de savoir comment les utiliser correctement, sans avoir besoin de s'inquiéter ni savoir de quoi elles sont composées, ni comment elles fonctionnent en interne.

                            Si tu tiens vraiment à en savoir plus long sur les entrées et sorties standard, ce n'est -- clairement pas au niveau de l'assembleur que tu dois regarder.  De toutes manières, il y a de fortes chances pour que, à ce niveau, tout ce que tu puisse constater, c'est deux "Load Effective Address" (un pour fournir les éléments à afficher / lire, le second pour fournir le callback qui sera appelés) sur rsi / rdi suivi de l'appel d'une fonction fournie par la bibliothèque .

                            Pour le reste, tu dois te dire que les opérateurs de flux (<< et >>) ne sont -- comme n'importe quel opérateur d'ailleurs -- que des fonctions qui se cachent bien, qui se chargeront de faire la "conversion" entre les valeurs binaires utilisées en interne et  la représentation alpha numérique "compréhensible par l'humain" (un peu à l'instar des fonctions printf / scanf et autre fread / fwrite du C), qui correspondent aux prototypes respectifs de

                            /* pour les flux de sorties */
                            std::basic_ostream & operator << (std::basic_ostream &, DaTaype const &)
                            /* pour les flux d'entrées */
                            std::basic_istream & operator >>(std::basic_istream &, DataType &)


                            qui sont déjà pré-implémentées pour l'ensemble des types primitifs connus (char, short, int, long, long long, dans  leurs version signed et unsigned, ainsi que float, double et long double), et que l'on peut définir pour tous les types de données personnalisés que nous déciderons de créer.

                            La seule différence entre ces abstractions de flux et leur équivalent en C, c'est que les flux savent en permanence dans quel états ils se trouvent, et peuvent refuser de fonctionner si leur état est invalide, alors que, en C, nous devrons récupérer la valeur de retour des fonctions utilisées pour savoir si elle s'est déroulée correctement.

                            Il n'y a -- au final -- pas plus de raison d'être intigré par std::cin / std::cout qu'il n'y en a à être intigré par ...la structure FILE et les fonctions scanf / printf / fread ou fwrite en C!!! : ce sont des fonctionnalités qui te sont fournies, qui font le taf pour lequel elles sont prévues, qui le font bien, et que c'est tout ce qui importe ;)

                            Si tu veux -- malgré tout -- en savoir encore d'avantage sur ces fonctionnalités, sur la manière dont elles travaillent, sur la structure interne des données et sur le code assembleur qui est utilisé, la seule solution est de t'intéresser au code source du compilateur lui-même (tu peux obtenir le code source de Gcc ou de clang sans aucune difficulté), mais, pour te faire une idée précise -- vu  que ces deux compilateurs sont portables (utilisables aussi bien sous windows que sous linux ou mac) -- pour une architecture donnée, tu risque de devoir t'intéresser à toute une série de macro de configuration pour le moins imbitable ;)

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait

                            Faire un cout sans iostream ou d’autres libraires

                            × 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