¿Por qué es #include iostream.h malo?

46

Estaba leyendo otro hilo donde un chico preguntó acerca de los libros de C ++ para principiantes, y uno de los programadores que respondieron escribió esto:

  

Algunas advertencias: evite todos los libros que presentan un "hola mundo" indicando con

#include <iostream.h>

Abrí mi libro en C ++ y, efectivamente, incluía el encabezado de iostream como en el ejemplo anterior.

¿Por qué es tan malo? ¿Qué otros indicadores debo tener en cuenta al aprender C ++?

Antecedentes: domino C y comenzaré a aprender C ++ el próximo semestre.

    
pregunta Daniel Scocco 26.12.2011 - 13:03

4 respuestas

57

El encabezado iostream.h es un encabezado no estándar y no existe en todas las plataformas. De hecho, no existe en mi sistema (usando g ++ y GNU libstdc ++). Por lo tanto, cualquier código que lo use simplemente no se compilará en mi sistema.

El encabezado iostream.h solía ser común antes de que C ++ se estandarizara por primera vez en 1998. Pero como el estándar 98 usaba <iostream> en lugar de <iostream.h> , este último ha caído en desuso (no siendo estándar y todo) y ya no es compatible con todas las plataformas. El código que lo utiliza debe considerarse un código heredado no estándar y no es portátil. Los libros que lo enseñan deben considerarse obsoletos y evitados.

    
respondido por el sepp2k 26.12.2011 - 13:20
55

#include <iostream.h> es una señal de que el libro se escribió antes del primer estándar de C ++ en 1998 (el encabezado estándar es iostream ).

El problema es que el código antiguo de C ++ tiende a escribirse de manera que hoy en día se considera una mala práctica. En particular,

  • El uso de matrices de estilo C en lugar de clases de contenedor como std::string y std::vector .
  • El uso de funciones close explícitas en lugar de RAII.

iostream.h no es la cosa peor que un libro anterior a 1998 se pondrá mal, pero es probable que sea la primera cosa que un libro anterior a 1998 equivocarse.

    
respondido por el dan04 26.12.2011 - 21:55
1

Tal vez esto llegue un poco tarde, pero para lo que vale, en una caja de Unix / Linux haga ls /usr/{local/,}include/c++/* o similar, de acuerdo con su diseño y rutas. Podría canalizar a grep buscando el encabezado en cuestión, como:

ls /usr/{local/,}include/c++/* | grep iostream 

Esto implica una búsqueda de iostream.h , así como cualquier otra supercuerdas.

O ejecute find / -type f -name iostream 2> /dev/null | grep include o locate iostream | grep include (siempre que la base de datos esté actualizada, de lo contrario, agregue una llamada a updatedb ). Sin embargo, estos también imprimirán los archivos que no son de todo el sistema, así que realice los ajustes adecuados. La ruta real de inclusión de C ++ se encuentra fácilmente con algo como:

g++ -v 2>&1| sed -rn 's/.+gxx-include[^=]+=([^ ]+).+//p' # adjust iff empty

Equivalentemente en Windows y otras máquinas. Supongo que la idea es clara: un archivo como iostream.h ya no existe en la ruta de inclusión del sistema por defecto, aún así, sin embargo, puede encontrar distribuciones legadas de libc ++ con iostream.h o bien enlazado por software a iostream o como su copia. Así que esto no es una cuestión de estilo sino de las circunstancias. Puede enviar su propio iostream.h con su proyecto, solo asegúrese de que esté contenido en la ruta de inclusión donde su compilador busca los encabezados <...> .

    
respondido por el Nicholas 30.07.2013 - 12:21
-1

Solo estoy bajando mis 2 centavos. No creo que haya una correlación entre ".h" y la calidad de un libro. Este es un problema menor de sintaxis. De vuelta en el día era en realidad el sytnax correcto.

¿Es posible tener un gran libro con iostream.h? si

¿Es posible tener un libro terrible con iostream? si

Confiaría en las opiniones de los usuarios en línea (y mi propia revisión después de leer) para juzgar la calidad de un libro.

    
respondido por el Lord Tydus 26.12.2011 - 14:28

Lea otras preguntas en las etiquetas