Quelle est la différence entre iostream
et iostream.h
?Différence entre iostream et iostream.h
Répondre
iostream.h
est dépréciée par les compilateurs qui le fournissent, iostream
fait partie de la norme C++.
Pour clarifier explicitement, il n'y a aucune mention de iostream.h
dans la norme C++ actuelle (INCITS ISO CEI 14882 2003). Editer: Comme l'a mentionné @Jerry, non seulement le standard actuel ne le mentionne pas, mais aucun standard pour C++ ne le mentionne.
iostream est un en-tête standard. iostream.h est un en-tête non-standard qui était très commun dans le C++ pré-standard, et c'est de là qu'est né iostream. Il est toujours courant d'avoir iostream.h autour, vraisemblablement pour une utilisation avec des programmes plus anciens. Si votre implémentation possède une copie de travail de iostream.h, elle est probablement la même que iostream sauf que tout dans iostream se trouve dans l'espace de noms std
, alors que iostream.h précède généralement les espaces de noms et ne les utilise pas.
Si votre mise en œuvre est à la fois iostream et iostream.h, iostream est susceptible de fonctionner comme:
namespace std
{
#include <iostream.h>
}
bien que ce soit pas nécessairement la façon dont il est écrit.
En fait, il y a souvent * beaucoup * plus de différences que ça - les flux dans iostream.h n'étaient généralement pas des modèles comme dans iostream. Si vous faites beaucoup plus que de simples lectures et écritures (par exemple, écrire des manipulateurs), la différence est souvent importante. –
@Jerry: Vous avez raison, mais malheureusement, vous rapportez des souvenirs d'un système que j'ai dû convertir et qui avait fait l'objet d'une magie mal documentée sur les streams. Cependant, cela ne signifie pas nécessairement qu'il existe une différence significative entre iostream.h et iostream dans une implémentation moderne. Si je me souviens, je regarderai ma mise en œuvre gcc quand je rentre à la maison. –
oui, c'est pourquoi j'ai commenté ailleurs que les différences entre iostream et iostream.h varient considérablement. Dans certains cas, iostream.h est une implémentation courante, avec des déclarations 'using' pour tout le contenu. Dans d'autres cas, c'est une ancienne implémentation (et dans quelques cas, quelque chose entre ...) –
Lors de la création de C++, tous les fichiers de la bibliothèque d'exécution standard se terminaient par .h. La vie était consistante, et c'était bon. La version originale de cout et cin vivait dans iostream.h. Lorsque le langage a été normalisé par le comité ANSI, ils ont décidé de déplacer toutes les fonctions de la bibliothèque d'exécution dans l'espace de noms std (ce qui est généralement une bonne idée). Cependant, cela posait un problème: s'ils déplaçaient toutes les fonctions dans l'espace de noms std, aucun des anciens programmes ne fonctionnerait plus! Pour tenter de contourner ce problème, tout en conservant la compatibilité ascendante pour les programmes plus anciens, un nouvel ensemble de fichiers d'en-tête a été introduit qui utilisent les mêmes noms mais n'ont pas l'extension .h. Ces nouveaux fichiers d'en-tête ont toutes leurs fonctionnalités dans l'espace de noms std. De cette façon, les anciens programmes qui incluent #include <iostream.h>
n'ont pas besoin d'être réécrits, et les nouveaux programmes peuvent #include <iostream>
.
Lorsque vous incluez un fichier d'en-tête de la bibliothèque standard, veillez à utiliser la version non .h si elle existe. Sinon, vous utiliserez une version obsolète de l'en-tête qui n'est plus supportée.
En outre, de nombreuses bibliothèques héritées de C qui étaient encore utiles en C++ ont reçu un préfixe c (par exemple, stdlib.h est devenu cstdlib). La fonctionnalité de ces bibliothèques a également été déplacée dans l'espace de noms std pour éviter les conflits de noms. Toutefois, lorsque vous écrivez vos propres fichiers d'en-tête, vous devez leur attribuer une extension .h, car vous ne placerez pas votre code dans l'espace de noms std. Règle: utilisez la version non .h d'une bibliothèque, si elle existe, et accédez à la fonctionnalité via l'espace de noms std. Si la version autre que .h n'existe pas ou si vous créez vos propres en-têtes, utilisez la version .h
Vous devez probablement mentionner l'espace de noms std. – zdan
@Jerry: Gardé le libellé mais clarifié la signification –
@Jerry: Merci, ajouté. –