2009-05-23 19 views
8

Tengo esta duda básica. El encabezado STL no tiene la extensión .h.¿por qué los archivos de encabezado STL no tienen extensión?

#include <vector> 
#include <map> 

¿Hay alguna razón específica detrás de esto? Alguien sabe la historia detrás de esto, por favor comparte.

EDITAR:

@GMan encontró Michael Burr's answer que aborda esta cuestión.

+3

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

+0

Gracias @GMan. Mi búsqueda en SO y Google no reveló esto. Eso es porque la pregunta vinculada es un poco diferente. De todos modos, creo que la respuesta de Michael Burr aborda mi pregunta. –

Respuesta

8
  • directiva #include El no discrimina tipos de archivo (que es sólo una operación de copiar y pegar glorificado) - la adición de ningún automática de .h que está sucediendo. archivos de encabezado estándar
  • C++ se proporcionan sin la extensión .h
  • archivos de cabecera de la compatibilidad hacia atrás A veces son proporcionados por el proveedor con el mismo nombre con la extensión .h añadido

Todo tiene que ver con los espacios de nombres . Los homólogos .h para C++ cabeceras estándar generalmente # incluye el correcto encabezado de C++ estándar (sin la extensión .h) y luego emite un montón de utilizar (algo así):

ARCHIVO: iostream.ho

#include <iostream> 

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

mientras que el archivo de cabecera sin la extensión .h no contamina el espacio de nombres con todas las clases y tipos definidos.

+3

iostream.h existe? Estoy usando C++ durante 8 años, y nunca pensé en eso ... – Calmarius

Cuestiones relacionadas