Por que #include iostream.h é ruim?

46

Eu estava lendo outro tópico onde um cara perguntava sobre livros C ++ para iniciantes, e um dos programadores respondendo escreveu:

Some warnings: avoid all books that present an "hello world" stating with

#include <iostream.h>

Eu abri meu livro C ++ e com certeza incluí o cabeçalho iostream como no exemplo acima.

Por que isso é ruim? Quais outros indicadores devo ter em mente ao aprender C ++?

Histórico: Sou proficiente em C e vou começar a aprender C ++ no próximo semestre.

    
por Daniel Scocco 26.12.2011 / 13:03
fonte

4 respostas

57

O cabeçalho iostream.h é um cabeçalho não padrão e não existe em todas as plataformas. De fato, ele não existe no meu sistema (usando o g ++ e o GNU libstdc ++). Então, qualquer código usando isso simplesmente não seria compilado no meu sistema.

O cabeçalho iostream.h costumava ser comum antes do C ++ ser padronizado pela primeira vez em 1998. Mas como o padrão 98 usava <iostream> em vez de <iostream.h> , o último caiu em desuso (sendo não-padrão e todos) e não é mais suportado em todas as plataformas. O código que o usa deve ser considerado código legado não padrão e não é portátil. Livros que ensinam isso devem ser considerados ultrapassados e evitados.

    
por 26.12.2011 / 13:20
fonte
55

#include <iostream.h> é um sinal de que o livro foi escrito antes do primeiro padrão de C ++ em 1998 (o cabeçalho padrão é iostream ).

O problema é que o código C ++ antigo tende a ser escrito de maneiras que são consideradas más práticas hoje. Em particular,

  • O uso de matrizes de estilo C em vez de classes de contêiner como std::string e std::vector .
  • O uso de funções close explícitas em vez de RAII.

iostream.h não é a pior coisa que um livro pré-1998 vai errar, mas é provável que seja a primeira coisa que um livro pré-1998 vai fazer errar.

    
por 26.12.2011 / 21:55
fonte
1

Talvez isso chegue um pouco atrasado, mas vale a pena, em uma caixa unix / linux do ls /usr/{local/,}include/c++/* ou similar, de acordo com o layout e os caminhos. Você pode canalizar para grep procurando o cabeçalho em questão, como:

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

Isso implica em uma pesquisa de iostream.h , bem como de quaisquer outras supercordas.

Ou execute find / -type f -name iostream 2> /dev/null | grep include ou locate iostream | grep include (desde que o banco de dados esteja atualizado, caso contrário, preencha com uma chamada para updatedb ) - estes, no entanto, imprimirão inclusões fora do sistema, por isso ajuste apropriadamente. O caminho de inclusão do C ++ real é facilmente encontrado com algo como:

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

Equivalente no Windows e em outras máquinas. Eu acho que a idéia é clara - um arquivo como iostream.h não existe no sistema inclui caminho por padrão, você ainda pode, no entanto, encontrar distribuições legacy libc ++ com iostream.h com link suave para iostream ou como sua cópia. Então, isso não é uma questão de estilo, mas sim das circunstâncias. Você poderia enviar seu próprio iostream.h com o seu projeto, apenas certifique-se de que ele esteja contido no caminho de inclusão onde seu compilador procura os <...> cabeçalhos.

    
por 30.07.2013 / 12:21
fonte
-1

Apenas soltando meus 2 centavos. Eu não acho que haja uma correlação entre ".h" e a qualidade de um livro. Este é um problema de sintaxe menor. De volta ao dia, na verdade, era o sytnax correto.

É possível ter um ótimo livro com o iostream.h? sim

É possível ter um livro terrível com o iostream? sim

Eu confiaria nas avaliações de usuários on-line (e na minha própria revisão após a leitura) para avaliar a qualidade de um livro.

    
por 26.12.2011 / 14:28
fonte