2009-05-23 4 views
8

J'ai ce doute de base. L'en-tête STL n'a pas l'extension .h.pourquoi les fichiers d'en-tête STL n'ont aucune extension?

#include <vector> 
#include <map> 

Y a-t-il une raison spécifique derrière cela? Tout le monde connaît l'histoire derrière cela, s'il vous plaît partager.

EDIT:

@GMan trouvé Michael Burr's answer qui répond à cette question.

+3

Dupliquer: http://stackoverflow.com/questions/441568/quand-peut-vous-obtenir-l'extension-du-fichier-dans-include-directive – GManNickG

+0

Merci @GMan. Ma recherche dans SO et Google n'a pas révélé cela. C'est parce que la question liée est un peu différente. Quoi qu'il en soit, je pense que la réponse de Michael Burr répond à ma question. –

Répondre

8
  • La directive #include ne discrimine pas les types de fichiers (il est juste une opération copier-coller glorifiée) - ne se passe automatiquement l'ajout de .h.
  • C fichiers d'en-tête standard de sont fournis sans l'extension .h
  • fichiers d'en-tête de compatibilité parfois en arrière sont fournis par le vendeur du même nom avec l'extension .h ajouté

Il a tout à voir avec namespaces . Les homologues .h pour les en-têtes C++ standard #Includes habituellement l'en-tête approprié C++ standard (sans .h extension) et délivre ensuite un tas d'utiliser (quelque chose comme ça):

DOSSIER: iostream.h

#include <iostream> 

using std::iostream; 
using std::ostream; 
using std::ios; 
... 

alors que le fichier d'en-tête sans l'extension .h ne pollue pas l'espace de noms avec toutes les classes et types définis.

+3

iostream.h existe? J'utilise C++ depuis 8 ans, et je n'y ai jamais pensé ... – Calmarius