Ich las gerade einen anderen Thread, in dem ein Typ nach C ++ - Büchern für Anfänger fragte, und einer der Programmierer, der antwortete, schrieb Folgendes:
Einige Warnungen: Vermeiden Sie alle Bücher, die eine "Hallo Welt" enthalten
#include <iostream.h>
Ich habe mein C ++ - Buch geöffnet und es enthielt den iostream-Header wie im obigen Beispiel.
Warum ist das so schlimm? Welche weiteren Hinweise sollte ich beim Erlernen von C ++ beachten?
Hintergrund: Ich beherrsche C sehr gut und fange im nächsten Semester an, C ++ zu lernen.
c++
coding-style
code-quality
coding-standards
headers
Daniel Scocco
quelle
quelle
cstdio
nicht enthalten seinstdio.h
(letzterer ist veraltet).<cstdio>
garantiert die Namen in bereitgestellt werden,namespace std
ist Grund genug für mich, es zu bevorzugen. Ich weiß, dass es sie auch im globalen Namensraum bereitstellen<stdio.h>
könnte , genauso wie es sie in bereitstellen könntenamespace std
. Es ist auch eine Frage der Konsistenz, wenn Sie es sich zur Gewohnheit machen, immer die<c…>
Überschriften zu verwenden. Und für einige Header ist dies sehr wünschenswert, da sie beispielsweise die C-Schnittstelle durch zusätzliche Funktionsüberladungen erweitern.Antworten:
Der Header iostream.h ist kein Standardheader und nicht auf allen Plattformen vorhanden. Tatsächlich existiert es auf meinem System nicht (mit g ++ und der GNU libstdc ++). Daher würde jeder Code, der ihn verwendet, einfach nicht auf meinem System kompiliert.
Der
iostream.h
Header verwendet üblich zu sein , bevor C ++ erstmals 1998 standardisiert wurde aber , da die 98 - Standard verwendet<iostream>
statt<iostream.h>
, hat diese in Ungnade gefallen heraus (als Nicht-Standard und alle) und ist nicht mehr auf allen Plattformen unterstützt. Code, der diesen verwendet, sollte als nicht standardmäßiger Legacy-Code betrachtet werden und ist nicht portierbar. Bücher, in denen es gelehrt wird, sollten als veraltet betrachtet und vermieden werden.quelle
#include <iostream.h>
ist ein Zeichen dafür, dass das Buch vor dem ersten C ++ - Standard im Jahr 1998 geschrieben wurde (der Standard-Header istiostream
).Das Problem ist, dass älterer C ++ - Code in der Regel so geschrieben wird, wie es heutzutage als schlechte Praxis angesehen wird. Speziell,
std::string
undstd::vector
.close
Funktionen anstelle von RAII.iostream.h
Es ist nicht das Schlimmste, was ein Buch vor 1998 falsch machen wird, aber es ist wahrscheinlich das Erste, was ein Buch vor 1998 falsch machen wird.quelle
Vielleicht kommt das etwas spät, aber für das, was es wert ist, auf einer Unix / Linux-Box
ls /usr/{local/,}include/c++/*
oder ähnlichem, je nach Layout und Pfad. Sie können diegrep
Suche nach dem betreffenden Header wie folgt fortsetzen:Dies beinhaltet eine Suche nach
iostream.h
wie auch nach anderen Superstrings.Oder ausführen
find / -type f -name iostream 2> /dev/null | grep include
oderlocate iostream | grep include
(sofern die Datenbank aktuell ist, andernfalls einen Aufruf von voranstellenupdatedb
) - diese werden jedoch auch nicht systemweite Includes ausgeben, passen Sie sie also entsprechend an. Der eigentliche C ++ - Include-Pfad lässt sich leicht wie folgt ermitteln:Äquivalent zu Windows und anderen Computern. Ich denke, die Idee ist klar - eine Datei,
iostream.h
die standardmäßig nicht mehr im System-Include-Pfad vorhanden ist, ist weiterhin verfügbar. Sie können jedoch ältere libc ++ - Distributionen finden, dieiostream.h
entweder mit einem Softlinkiostream
oder als Kopie verknüpft sind . Das ist also keine Frage des Stils, sondern der Umstände. Sie können Ihr eigenesiostream.h
Projekt mitliefern, indem Sie sicherstellen, dass es im Include-Pfad enthalten ist, in dem Ihr Compiler nach den<...>
Headern sucht .quelle
Ich lasse nur meine 2 Cent fallen. Ich glaube nicht, dass es einen Zusammenhang zwischen ".h" und der Qualität eines Buches gibt. Dies ist ein kleines Syntaxproblem. Damals war es eigentlich die richtige Sytnax.
Ist es möglich, mit iostream.h ein großartiges Buch zu haben? Ja
Kann man mit iostream ein schreckliches Buch haben? Ja
Um die Qualität eines Buches beurteilen zu können, würde ich mich auf Online-Benutzerkritiken (und auf meine eigene Rezension nach dem Lesen) verlassen.
quelle