C-Strings vergleichen
-
Richtig, so ist es auch keine Schande, wenn in irgendwelchen Beta Phasen von Büchern die warsch. auch nur online released worden sind Fehler drinnen sind.
Außerdem gibts in jedem Buch Fehler.
-
volkard schrieb:
Felixxx schrieb:
#include <iostream.h>
void main()
{
// Dies ist das Hello-World-Programm
cout<<"Hello, world!"<<endl;
};Dieses kleine Programm schreibt "Hello, world!" (ohne die Anführungszeichen) auf den Bildschirm und setzt den Cursor auf den Beginn der nächsten Bildschirmzeile.
Zusatzaufgabe: Abgesehen von der Verwendung des alten Nicht-Standard-Headers, was ist an diesem Programm noch falsch? Ich sehe noch zwei Sachen.
return wert und das coole Semikolen.
-
Felixxx schrieb:
Richtig, so ist es auch keine Schande, wenn in irgendwelchen Beta Phasen von Büchern die warsch. auch nur online released worden sind Fehler drinnen sind.
Erstens sind die Fehler bei Wolf wohl auch in der Print-Ausgabe und zweitens musst du wirklich auf das Datum achten, wann volkard sein Tutorial geschrieben hat. Es gab mal Zeiten, da wars noch nicht so weit her mit dem C++-Standard und seiner Unterstützung durch die Compiler.
-
Wir sehen aber, daß die J.W.-Leser oft schlimme Verständnisschwierigkeiten bekommen, die wir dann in langen Threads mühsam ausräumen. Und daß sie am Ende schneller C++ lernen würden, wenn sie das Buch nicht aufgeschlagen hätten.
Das ist das eigentliche Problem. Nicht, daß er ein wenig Papier schwarz macht.
-
Felixxx schrieb:
return wert
Nö. Die main() braucht kein return.
Aber fein, daß Du das Semikolon entdeckt hast.
-
volkard schrieb:
Felixxx schrieb:
return wert
Nö. Die main() braucht kein return.
Aber fein, daß Du das Semikolon entdeckt hast.seit wann ist das nen fehler? oO
-
volkard schrieb:
Zusatzaufgabe: Abgesehen von der Verwendung des alten Nicht-Standard-Headers, was ist an diesem Programm noch falsch? Ich sehe noch zwei Sachen.
void main und das Semikolon nach dem Funktionskörper.
@Felixxx: return aus main ist in C++ nicht mehr notwendig; per Default wird aus main 0 zurückgegeben. In Vorstandardzeiten (bzw. Zeiten, bevor standardkonforme Compiler gängig waren), als void main nicht als problematisch angesehen wurde, war ein return aus einer void-Funktion natürlich ebenfalls unnötig.
Allerdings wäre es womöglich an der Zeit, den Kurs vom Netz zu nehmen; inzwischen ist er in der bestehenden Form auch nicht wirklich hilfreich.
-
unskilled schrieb:
volkard schrieb:
Felixxx schrieb:
return wert
Nö. Die main() braucht kein return.
Aber fein, daß Du das Semikolon entdeckt hast.seit wann ist das nen fehler? oO
.h ist auch kein FEHLER. Ich denke ihr wisst was gemeint ist.
Dass es tatsächlich Leser gibt, die Verständnisschwierigkeiten haben und auch das Buch von J.W. gelesen haben, bezweifle ich nicht, aber dass das alleine von diesem Buch kommt doch sehr stark. Ob ich int ausgabe am anfang deklariere oder erst kurz vor der tatsächlichen Verwendung verändert nicht meine Fähigkeit etwas zu verstehen. Außerdem, wer wird denn nur ein Buch lesen ?
-
seldon schrieb:
volkard schrieb:
Zusatzaufgabe: Abgesehen von der Verwendung des alten Nicht-Standard-Headers, was ist an diesem Programm noch falsch? Ich sehe noch zwei Sachen.
void main und das Semikolon nach dem Funktionskörper.
@Felixxx: return aus main ist in C++ nicht mehr notwendig; per Default wird aus main 0 zurückgegeben. In Vorstandardzeiten (bzw. Zeiten, bevor standardkonforme Compiler gängig waren), als void main nicht als problematisch angesehen wurde, war ein return aus einer void-Funktion natürlich ebenfalls unnötig.
Allerdings wäre es womöglich an der Zeit, den Kurs vom Netz zu nehmen; inzwischen ist er in der bestehenden Form auch nicht wirklich hilfreich.
Ja, das ist mir klar^^ Für Windows ist das wayne. Für DOS war es das nicht.
-
Felixxx schrieb:
Ja, das ist mir klar^^ Für Windows ist das wayne. Für DOS war es das nicht.
Erstens ist es nicht wayne. Siehe Rückgabe der ping.exe.
Zweitens, woher kennst Du DOS?
-
1. .h an Standardheadern ist ein Fehler.
2. Wenn du weißt, dass in main kein return notwendig ist, warum hast du sein Fehlen dann als Fehler bezeichnet?Übrigens ist ; nach Funktionskörpern ebenfalls ein Fehler; ein standardkonformer Compiler darf so etwas durchaus ablehnen.
Ansonsten kann es durchaus sein, dass einzelne J.W.-Leser zusätzlich durch andere Quellen verwirrt werden (ich schaue in deine Richtung, Markt+Technik!), aber Wolfs Bücher enthalten viele Fehlinformationen, und die Gefahr ist hoch, dass jemand wie du (zaunpfahl-wink) diese Bücher liest und den Kram darin glaubt, weil sie in einem Buch stehen. Wir kriegen hier viele Leute, die seine Bücher lesen und hier mit Fragen kommen, die gar nicht erst aufgekommen wären, hätten sie vernünftige Bücher gelesen. Darum ist er hier so berüchtigt.
Obwohl es zugegeben vergleichsweise selten vorkommt, dass jemand sie trotzdem so vehement verteidigt wie du.
-
Felixxx schrieb:
Ja, das ist mir klar^^ Für Windows ist das wayne. Für DOS war es das nicht.
Was hat denn die Standardrückgabe mit dem verwendeten Betriebssystem zu tun?
-
seldon schrieb:
1. .h an Standardheadern ist ein Fehler.
2. Wenn du weißt, dass in main kein return notwendig ist, warum hast du sein Fehlen dann als Fehler bezeichnet?Übrigens ist ; nach Funktionskörpern ebenfalls ein Fehler; ein standardkonformer Compiler darf so etwas durchaus ablehnen.
1. Die meisten Compiler geben nur eine Warnung aus. Das Programm wird auch korrekt ausgeführt.
2. Stützt sich auf 1. ! Ebenfalls wird hier eine Warnung ausgegeben. Deswegen habe ich es auch erwähnt.Den Semikolon-Fehler hatte ich ebenfalls erwähnt.
Wie dem auch sei, ich gehe jetzt pennen, haut rein Jungs.
Hat Spaß gemacht hier ein bisschen zu diskutieren.
So vehment habe ich reagiert, weil Eure Abneigung dem Buch gegenüber nicht weniger heftig ist und ich die richtigen Gründe dafür noch nicht wirklich erfahren habe.
-
Übrigens ist ; nach Funktionskörpern ebenfalls ein Fehler; ein standardkonformer Compiler darf so etwas durchaus ablehnen
woher entnimmst du das?
ich glaube nicht, dass im standard steht, dass leere anweisungen verboten sind...int main() { ;;; }
verboten?
int x;; int main() {}
verboten?
int main() {} ;;
verboten?
ich glaube, keins davon ist nicht 100%ig standard-konform.
soll nicht heißen, dass es gut ist, semikoli zu spammen - aber fehler ists meines erachtens keiner...bb
-
Felixxx schrieb:
1. Die meisten Compiler geben nur eine Warnung aus. Das Programm wird auch korrekt ausgeführt.
2. Stützt sich auf 1. ! Ebenfalls wird hier eine Warnung ausgegeben. Deswegen habe ich es auch erwähnt.Also ist standardkonform, was dein Compiler schluckt?
-
unskilled schrieb:
ich glaube nicht, dass im standard steht, dass leere anweisungen verboten sind...
Es steht explizit drin, daß es die leere Anweisung gibt, die nur aus einem Semikolon besteht. Die leere Anweisung darf er also nicht ablehnen. Anweisungen stehen innerhalb von Funktionen. Dort kannste Semikola hinknallen in jeder Menge.
Außerhalb wäre es eine leere Deklaration. Und die ist nirgends erlaubt worden. Also kann ein standardkonformer Compiler sie ablehnen.
-
Michael E. schrieb:
Felixxx schrieb:
1. Die meisten Compiler geben nur eine Warnung aus. Das Programm wird auch korrekt ausgeführt.
2. Stützt sich auf 1. ! Ebenfalls wird hier eine Warnung ausgegeben. Deswegen habe ich es auch erwähnt.Also ist standardkonform, was dein Compiler schluckt?
Ich habe keinen Ahnung von was Du redest oder auf was Du hinaus willst, aber ich habe den Eindruck dass du nicht verstehst, auf was _ich_ hinaus will. Ich erzähls dir morgen bzw. in ein paar Stunden
-
$ g++ test.cc test.cc:1:22: schwerwiegender Fehler: iostream.h: Datei oder Verzeichnis nicht gefunden Kompilierung beendet.
Ein Semikolon nach Funktionskörpern wird von den meisten Compilern geschluckt, das ist richtig, aber die Grammatik, wie sie im Standard beschrieben wird, gibt es eigentlich nicht her.
Relevante Teile der Grammatik:
function-definition: decl-specifier-seq[t]opt[/t] declarator ctor-initializer[t]opt[/t] function-body decl-specifier-seq[t]opt[/t] declarator function-try-block function-body: compound-statement function-try-block: try ctor-initializer[t]opt[/t] function-body handler-seq handler-seq: handler handler-seq[t]opt[/t] handler: catch ( exception-declaration ) compound-statement compound-statement: { statement-seqopt }
Bemerke, dass compound-statement durch eine geschweifte Klammer und kein Semikolon beendet wird.
-
seldon schrieb:
Geldbeträge sind meistens am sinnvollsten in Cent mit großen Integertypen berechnet (etwa std::tr1::int64_t).
Es hat sich eigentlich eingebürgert dass man mit Faktor 10000 arbeitet. Es gibt einfach zu viele Währungen die nicht Faktor 100 für die Unterwährung verwenden, sondern Faktor 1000 oder auch mal 2000.
-
In dem Buch sind n paar Syntaxfehler drin aber es ist nicht überhäuft. Außerdem könnt ihr froh sein, dass es das Buch gibt, denn sonst könnte das Forum ja fast zu machen
.
Ich bin jetzt auch bei Strings in dem Buch angekommen und werd es auch weiterlesen, da ich dafür ja gezahlt habe.