Estaba leyendo otro hilo donde un chico preguntó sobre libros de C ++ para principiantes, y uno de los programadores que respondieron escribió esto:
Algunas advertencias: evite todos los libros que presenten un "hola mundo" con
#include <iostream.h>
Abrí mi libro C ++ y, efectivamente, incluía el encabezado iostream como en el ejemplo anterior.
¿Por qué es eso malo? ¿Qué otros indicadores debo tener en cuenta al aprender C ++?
Antecedentes: soy competente con C y comenzaré a aprender C ++ el próximo semestre.
c++
coding-style
code-quality
coding-standards
headers
Daniel Scocco
fuente
fuente
cstdio
, nostdio.h
(este último está en desuso).<cstdio>
se garantice que proporcione los nombresnamespace std
es motivo suficiente para que lo prefiera. Sé que podría también proporcionarles a nombre-espacio global al igual que<stdio.h>
podría proporcionarles ennamespace std
. También es una cuestión de coherencia si acostumbras a usar siempre los<c…>
encabezados. Y para algunos encabezados, realmente querrá esto porque mejoran la interfaz C con sobrecargas de funciones adicionales, por ejemplo.Respuestas:
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 ++). Entonces, cualquier código que lo use simplemente no se compilará en mi sistema.
El
iostream.h
encabezado solía ser común antes de que C ++ se estandarizara por primera vez en 1998. Pero desde que se usó el estándar 98 en<iostream>
lugar de<iostream.h>
, este último ha caído en desgracia (no es estándar y todo) y ya no es compatible con todas las plataformas. El código que lo usa debe considerarse un código heredado no estándar y no es portátil. Los libros que lo enseñan deben considerarse obsoletos y evitarse.fuente
#include <iostream.h>
es una señal de que el libro fue escrito antes del primer estándar C ++ en 1998 (el encabezado estándar esiostream
).El problema es que el código C ++ anterior tiende a escribirse de una manera que hoy se considera una mala práctica. En particular,
std::string
ystd::vector
.close
funciones explícitas en lugar de RAII.iostream.h
no es lo peor que un libro anterior a 1998 se equivocará, pero es probable que sea lo primero que se equivoque un libro anterior a 1998.fuente
Tal vez esto llegue un poco tarde, pero para lo que vale, en un cuadro de Unix / Linux hacer
ls /usr/{local/,}include/c++/*
o similar, de acuerdo con su diseño y rutas. Podríasgrep
buscar el encabezado en cuestión, como:Esto implica una búsqueda,
iostream.h
así como cualquier otra supercadena.O ejecute
find / -type f -name iostream 2> /dev/null | grep include
olocate iostream | grep include
(siempre que la base de datos esté actualizada; de lo contrario, anteponga una llamada aupdatedb
); estos, sin embargo, imprimirán también inclusiones que no sean de todo el sistema, por lo que debe ajustarlas adecuadamente. La ruta de inclusión real de C ++ se encuentra fácilmente con algo como:Equivalente en Windows y otras máquinas. Supongo que la idea es clara: un archivo que
iostream.h
ya no existe en el sistema incluye la ruta de forma predeterminada, sin embargo, aún puede encontrar distribuciones libc ++ heredadas coniostream.h
enlaces suavesiostream
o como su copia. Así que esto no es una cuestión de estilo sino de circunstancias. Puede enviar el suyo propioiostream.h
con su proyecto solo asegúrese de que esté contenido en la ruta de inclusión donde su compilador busca los<...>
encabezados.fuente
Solo dejo caer 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. En el pasado, en realidad era la sintaxis correcta.
¿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 en mi propia opinión después de leer) para juzgar la calidad de un libro.
fuente