Czytałem inny wątek, w którym facet zapytał o książki C ++ dla początkujących, a jeden z programistów, który odpowiedział, napisał:
Niektóre ostrzeżenia: unikaj wszystkich książek, które przedstawiają „witaj świat”
#include <iostream.h>
Otworzyłem moją książkę C ++ i na pewno zawierała nagłówek iostream, jak w powyższym przykładzie.
Dlaczego to takie złe? O jakich innych wskazówkach powinienem pamiętać podczas nauki języka C ++?
Tło: Jestem biegły w C i zacznę uczyć się C ++ w następnym semestrze.
c++
coding-style
code-quality
coding-standards
headers
Daniel Scocco
źródło
źródło
cstdio
, a niestdio.h
(ten drugi jest przestarzały).<cstdio>
gwarantujemy podanie nazwisk,namespace std
jest wystarczającym powodem, dla którego wolę. Wiem, że może to również zapewniać je w globalnej przestrzeni nazw, tak jak<stdio.h>
może to zapewnićnamespace std
. Jest to również kwestia spójności, jeśli nauczysz się zawsze używać<c…>
nagłówków. A w przypadku niektórych nagłówków naprawdę tego potrzebujesz, ponieważ rozszerzają one interfejs C na przykład o dodatkowe przeciążenia funkcji.Odpowiedzi:
Nagłówek iostream.h jest niestandardowym nagłówkiem i nie istnieje na wszystkich platformach. W rzeczywistości nie istnieje w moim systemie (używając g ++ i GNU libstdc ++). Więc każdy kod, który go użyje, po prostu nie skompiluje się w moim systemie.
iostream.h
Nagłówek kiedyś Common C ++, zanim po raz pierwszy w 1998 roku standaryzowane Ale ponieważ Standard 98 stosowany<iostream>
zamiast<iostream.h>
, drugi wypadł z łask (jest niestandardowy i wszystkie) i nie jest już obsługiwany na wszystkich platformach. Kod, który go używa, powinien być uważany za niestandardowy starszy kod i nie jest przenośny. Książki, które tego nauczają, powinny być uważane za przestarzałe i należy ich unikać.źródło
#include <iostream.h>
jest znakiem, że książka została napisana przed pierwszym standardem C ++ w 1998 r. (standardowy nagłówek toiostream
).Problem polega na tym, że starszy kod C ++ jest zwykle pisany w sposób, który jest dziś uważany za złą praktykę. W szczególności,
std::string
istd::vector
.close
funkcji jawnych zamiast RAII.iostream.h
nie jest najgorszą rzeczą, że książka sprzed 1998 roku popełni błąd, ale prawdopodobnie będzie pierwszą rzeczą, w której książka sprzed 1998 roku popełni błąd.źródło
Może przychodzi to trochę za późno, ale na ile jest to warte, na unixie / linuksie zrób coś
ls /usr/{local/,}include/c++/*
podobnego, zgodnie z twoim układem i ścieżkami. Możeszgrep
wyszukiwać nagłówek, o którym mowa, na przykład:To pociąga za sobą poszukiwanie
iostream.h
zarówno innych superstrun.Lub uruchom
find / -type f -name iostream 2> /dev/null | grep include
lublocate iostream | grep include
(pod warunkiem, że baza danych jest aktualna, w przeciwnym razie poprzedzaj ją wywołaniemupdatedb
) - te zostaną jednak wydrukowane również nie dla całego systemu, więc dostosuj odpowiednio. Rzeczywistą ścieżkę dołączania C ++ można łatwo znaleźć za pomocą czegoś takiego:Odpowiednio w systemie Windows i innych komputerach. Myślę, że pomysł jest jasny - taki plik,
iostream.h
który nie istnieje już w systemie, domyślnie zawiera ścieżkę, jednak nadal można znaleźć starsze dystrybucje libc ++ ziostream.h
miękkim dowiązaniemiostream
lub jako jego kopię. To nie jest kwestia stylu, ale okoliczności. Możesz wysłać własnyiostream.h
projekt ze swoim projektem, po prostu upewnij się, że jest on zawarty w ścieżce dołączania, w której kompilator szuka<...>
nagłówków.źródło
Po prostu upuszczam moje 2 centy. Nie sądzę, żeby istniała korelacja między „.h” a jakością książki. Jest to niewielki problem ze składnią. Kiedyś był to właściwie sytnax.
Czy w iostream.h można mieć świetną książkę? tak
Czy można mieć okropną książkę z iostream? tak
Oparłbym się na opiniach użytkowników online (i mojej własnej opinii po przeczytaniu), aby ocenić jakość książki.
źródło