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.
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!!
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.
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.
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
<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 documenten entier.
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.
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
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.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C