2009-05-23 14 views
8

Ho questo dubbio di base. L'intestazione STL non ha l'estensione .h.perché i file di intestazione STL non hanno estensione?

#include <vector> 
#include <map> 

C'è qualche motivo specifico dietro questo? Qualcuno conosce la storia dietro a questo, per favore condividi.

EDIT:

@GMan trovato Michael Burr's answer che si rivolge questa domanda.

+3

Duplicato: http://stackoverflow.com/questions/441568/when-can-you-omit-the-file-extension-in-an-include-directive – GManNickG

+0

Grazie a @GMan. La mia ricerca in SO e Google non ha rivelato questo. Questo perché la domanda collegata è leggermente diversa. Ad ogni modo, sento che la risposta di Michael Burr risponde alla mia domanda. –

risposta

8
  • direttiva Il #include non discrimina i tipi di file (è solo un'operazione di copia-incolla glorificato) - l'aggiunta di nessun automatica di .h sta accadendo.
  • C++ file di intestazione standard sono forniti senza l'estensione h
  • file di intestazione compatibilità all'indietro Talvolta sono forniti dal fornitore con lo stesso nome con l'estensione h aggiunto

Tutto ha a che fare con i namespace . Le controparti .h per C++ intestazioni standard di solito # include la corretta intestazione C++ standard (senza .h estensione) e poi emette un mucchio di utilizzare (qualcosa di simile):

FILE: iostream.h

#include <iostream> 

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

mentre il file di intestazione senza l'estensione .h non inquina lo spazio dei nomi con tutte le classi e tipi definiti.

+3

esiste iostream.h? Sto usando C++ per 8 anni, e non ci avevo mai pensato ... – Calmarius

Problemi correlati