Eu estava lendo outro tópico em que um cara perguntou sobre livros em C ++ para iniciantes, e um dos programadores que responderam escreveu isso:
Alguns avisos: evite todos os livros que apresentem um "olá mundo" declarando com
#include <iostream.h>
Abri meu livro em C ++ e, com certeza, incluía o cabeçalho iostream como no exemplo acima.
Por que isso é ruim? Que outros indicadores devo ter em mente ao aprender C ++?
Antecedentes: Sou proficiente em C e começarei a aprender C ++ neste próximo semestre.
c++
coding-style
code-quality
coding-standards
headers
Daniel Scocco
fonte
fonte
cstdio
, nãostdio.h
(o último está obsoleto).<cstdio>
garantir os nomesnamespace std
é motivo suficiente para eu preferir. Eu sei que ele também pode fornecê-los no espaço de nomes global, assim como<stdio.h>
pode fornecê-losnamespace std
. Também é uma questão de consistência se você criar o hábito de sempre usar os<c…>
cabeçalhos. E para alguns cabeçalhos, você realmente desejará isso, porque eles aprimoram a interface C com sobrecargas adicionais de funções, por exemplo.Respostas:
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 ++). Portanto, qualquer código que o utilize simplesmente não será compilado no meu sistema.
O
iostream.h
cabeçalho costumava ser comum antes do C ++ ser padronizado pela primeira vez em 1998. Mas desde que o padrão 98 foi usado, em<iostream>
vez de<iostream.h>
, o último caiu em desuso (sendo não padrão e tudo) e não é mais suportado em todas as plataformas. O código que o utiliza deve ser considerado código legado não padrão e não é portátil. Os livros que o ensinam devem ser considerados ultrapassados e evitados.fonte
#include <iostream.h>
é um sinal de que o livro foi escrito antes do primeiro padrão C ++ em 1998 (o cabeçalho padrão éiostream
).O problema é que o código C ++ mais antigo tende a ser gravado de maneiras que hoje são consideradas más práticas. Em particular,
std::string
estd::vector
.close
funções explícitas em vez de RAII.iostream.h
não é a pior coisa que um livro antes de 1998 vai dar errado, mas é provável que seja a primeira coisa que um livro antes de 1998 vai dar errado.fonte
Talvez isso seja um pouco tarde, mas pelo que vale a pena, em uma caixa unix / linux faça
ls /usr/{local/,}include/c++/*
ou similar, de acordo com seu layout e caminhos. Você podegrep
procurar o cabeçalho em questão, como:Isso envolve uma pesquisa
iostream.h
, bem como quaisquer outras supercordas.Ou execute
find / -type f -name iostream 2> /dev/null | grep include
oulocate iostream | grep include
(desde que o banco de dados seja atual; caso contrário, inclua uma chamada paraupdatedb
) - estes, no entanto, também imprimirão inclusões que não são do sistema, portanto, ajuste-o adequadamente. O caminho de inclusão C ++ real é facilmente encontrado com algo como:Equivalentemente no Windows e em outras máquinas. Eu acho que a idéia é clara - como um arquivo
iostream.h
que não existe no sistema inclui o caminho por padrão por mais tempo, você ainda pode, no entanto, encontrar distribuições legadas do libc ++ comiostream.h
um link diretoiostream
ou cópia dele. Portanto, isso não é uma questão de estilo, mas das circunstâncias. Você pode enviar seu próprioiostream.h
projeto apenas para garantir que ele esteja contido no caminho de inclusão, onde seu compilador procura os<...>
cabeçalhos.fonte
Apenas caindo meus 2 centavos. Eu não acho que exista uma correlação entre ".h" e a qualidade de um livro. Esse é um problema menor de sintaxe. Naquela época, era na verdade a sintaxe correta.
É 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 resenhas de usuários on-line (e na minha própria resenha após a leitura) para julgar a qualidade de um livro.
fonte