sirve - stdlib c++
<iostream> vs.<iostream.h> vs. "iostream.h" (7)
Aquí hay un artículo de enlace decente .
Para resumir, la razón dada:
La versión de la biblioteca iostream que produjo el Comité de Estándares fue bastante diferente de la implementación de FrontEdge. {recorte}
Para facilitar la transición, el Comité de Estándares de C ++ declaró que el código que incluye los encabezados estándar de C ++ utilizaría incluye directivas que carecen de una extensión. Esto permitió a los proveedores de compiladores enviar los encabezados de biblioteca C ++ de estilo antiguo con la extensión .h y los nuevos encabezados de estilo sin.
Una ventaja de no usar la versión .h:
Existen varios motivos por los que se debe escribir un nuevo código utilizando la versión sin extensión de los archivos de encabezado en lugar de los formularios .h. El primero es la imprevisibilidad de dicho código cuando se compila en compiladores modernos. Como se mencionó anteriormente, el resultado del uso de los encabezados .h es específico de la implementación. Y a medida que pasa el tiempo, disminuye la posibilidad de que un compilador determinado tenga disponible la biblioteca de estilo antiguo.
Al incluir un archivo de encabezado en C ++, ¿cuál es la diferencia entre ...
1) incluyendo el .h versus no incluir .h cuando lo envuelve en signos <>?
#include <iostream> vs. #include <iostream.h>
2) envolviendo el nombre del encabezado entre comillas en lugar de envolverlo en signos <>?
#include <iostream.h> vs. #include "iostream.h"
¡Gracias por adelantado!
Como la persona en el comité de estándares (X3J16) que propuso dejar el .h, mi intención original era resolver el debate sobre las extensiones de archivos .h, .Hpp, .hxx o .h ++; o el deseo de algunos de que no haya implicación en el estándar de que este era el nombre de un archivo en el disco para permitir que un IDE extraiga la información del encabezado precompilado de un lugar interno como un archivo de recursos o incluso las agallas del compilador.
Mientras que Unix consideraba que el nombre del archivo era una sola cadena y no reconocía realmente el concepto de una extensión, los sistemas operativos DEC tenían una tradición de separar el nombre de la extensión y suministrar la "extensión predeterminada" si se omitía en contextos particulares. De ahí dejé la idea de dejarla en manos de la implementación para usar cualquier extensión que la implementación quisiera usar, y permitió que la implementación ni siquiera tuviera este un archivo en el disco. (Yo era representante de DEC en el comité en ese momento).
Diferenciar entre el estándar y los encabezados pre-estándar fue un beneficio adicional.
En breve:
iostream.h está en desuso, es la versión original de Stroustrup, y iostream es la versión del comité de estándares. En general, los compiladores señalan que ambos son lo mismo, pero algunos compiladores antiguos no tendrán el anterior. En algunos casos extraños, ambos existirán y serán diferentes (para admitir el código heredado) y usted deberá ser específico.
"" versus <> simplemente significa verificar los directorios locales para el encabezado antes de ir a la biblioteca (en la mayoría de los compiladores).
-Adán
Estas son realmente dos preguntas diferentes.
La diferencia entre los encabezados .h y sin extensión con el mismo nombre es histórica. Los que tienen la extensión .h son del estándar original de C ++ que no tiene algunas características modernas, como espacios de nombres y plantillas. Era más simple para el nuevo estándar poner esa misma funcionalidad en nuevos archivos de encabezado para poder usar estas nuevas características y mantener los archivos antiguos (.h) para la compatibilidad con versiones anteriores del código heredado.
La diferencia entre el formato #include <...> y el #include "..." es el orden en que el compilador busca los archivos. En general, esto depende de la implementación, pero la idea es que el formato <> se ve en el sistema incluye los directorios primero, mientras que "" busca en el mismo directorio el archivo fuente que #incluyó primero.
La forma estándar (y la única garantizada para trabajar) es <iostream>. En gcc, <iostream.h> (que podría necesitar ser incluido como <backward / iostream.h>) extrae las declaraciones relevantes al espacio de nombres global (por lo que no necesita el prefijo std :: namespace).
"iostream.h" intentará primero desde el directorio con su código fuente, ya que "" está destinado a los encabezados de su proyecto. <> siempre se debe usar para los encabezados del sistema y "" para sus propios encabezados.
La respuesta simple a la primera respuesta es que iostream.h no existe, al menos en la implementación de GCC. Si estás en * nix, escribe
% localizar iostream.h
/usr/include/c++/3.4.3/backward/iostream.h
y
% localizar iostream
/usr/include/c++/3.4.3/iostream
/usr/include/c++/3.4.3/backward/iostream.h
Como dice el artículo de Zee, iostream.h es para compatibilidad con versiones anteriores.
Normalmente, <> se utiliza para archivos de biblioteca estándar o de sistema, mientras que "" se usa para archivos de proyecto. No me sorprendería si el compilador realiza búsquedas locales y cuando no puede encontrarlo, se predetermina a la versión estándar de la biblioteca.
En cuanto a .h, no creo que realmente importe si usas C. En C ++, recuerdo vagamente que había una versión más nueva y una versión anterior y que sin la h se suponía que era la nueva versión, pero ni siquiera estoy seguro de que la versión anterior aún exista.