Warum eigentlich? --> Warnung: Kein Newline am Dateiende
-
shade37337 schrieb:
EOF = End Of File
du hast zwar echt es ist eigentlich kein zeichen aber es wird in C++ wie eins beahndelt...
naja aufjdenfall das letzet zeichen for dem EOF muss halöt ein newline sein..
Mfg SHade37337du kannst froh sein, dass das menschliche gehirn nur den ersten und letzten buchstabe eines wortes wissen muss, um sich dann irgendetwas zusammenzubauen!

-
hfghfh schrieb:
Artchi schrieb:
Ist das nicht im C++ Standard definiert, das am Ende eine Leerzeile sein soll?
jo der rest hier is natürlich quatsch
Recht hast du :p
-
Bei Codeblocks kann man einstellen, dass eine Leerzeile angehangen wird, wenn diese nicht vorhanden ist, zumindest im aktuellen SVN-Release.
-
Ein Quelltext ist eine Textdatei, und eine solche besteht aus Zeilen, und Zeilen haben ein Ende zu haben, ganz einfach

-
Ein Ende hat wohl jede Zeile. Stellt sich nur die Frage, ob man als letztes noch eine vollkommen leere Zeile der Länge 0 haben muss, oder ob das vielleicht nur wegen dem include-Gefrickel so verlangt wird.

-
Optimizer schrieb:
[...] oder ob das vielleicht nur wegen dem include-Gefrickel so verlangt wird.

Jetzt geht das schon wieder los ...

-
Optimizer schrieb:
Ein Ende hat wohl jede Zeile. Stellt sich nur die Frage, ob man als letztes noch eine vollkommen leere Zeile der Länge 0 haben muss, oder ob das vielleicht nur wegen dem include-Gefrickel so verlangt wird.

Eine Textdatei mit \n am Ende hat keine vollkommen leere Zeile am Ende, sondern eine Datei _ohne_ \n am Ende ist keine gültige Textdatei!

-
Optimizer schrieb:
Ein Ende hat wohl jede Zeile.
Richtig. Etwas, das kein Ende hat, ist damit keine Zeile.
Stellt sich nur die Frage, ob man als letztes noch eine vollkommen leere Zeile der Länge 0 haben muss,
Das ist keine Zeile.
-
ich will ja ned mit alten "volksliedern" kommen, aber alles hat ein ende, nur die wurst hat 2...
das es so definiert ist war mir schon klar, der compiler wird nichts in frage stellen, was nicht definiert wurde. aber warum es so definiert wurde , da hat niemand ne ahnung, ausser das es eventuell mit den include dateien zusammenhängen könnte. Die entwickler von c/c++ müssen sich ja schon was bei gedacht haben

-
Bashar schrieb:
Stellt sich nur die Frage, ob man als letztes noch eine vollkommen leere Zeile der Länge 0 haben muss,
Das ist keine Zeile.
Beweise es. Wenn ich in einem beliebigen Texteditor in diese nicht-Zeile gehe, wird mir deren Nummer angezeigt. Mein C#-Code compiliert, obwohl die letzte nicht-Zeile kein LF hat (aber nicht unwichtig für die Korrektheit des Codes ist). Zeilenvorschub lässt sich auch nicht salopp mit Zeilenende übersetzen, weil es einfach nur eine Markierung ist, die sinngemäß bedeutet, dass man an dieser Stelle nach unten in die nächste Zeile rutscht, dass alles, was danach folgt, in der nächsten Zeile steht. Zeilenwechsel != Zeilenende. Die Behauptung, dass eine Zeile ohne LF kein Ende hat (oder keine Zeile ist), ist sehr gewagt.
Wer definiert das? Muss demzufolge ein Text einen abschließenden Absatzwechsel haben? Habe ich auch noch nie gehört, wäre aber die selbe Logik. Ich beende auch dieses Posting gerade nicht durch einen abschließenden Zeilenwechsel.
-
Eine Zeile ist/war definiert als Folge von Zeichen und einem terminalen '\n'. Vergleiche es mit direkt aufeinander folgende C-String im Speicher.
Die meisten Texteditoren sehen ein EOF allerdings auch als Zeichenende an. Viele halten es noch nicht einmal für nötig die Zeile zu beeden bevor sie sie abspeichern.
Fals du aber einmal unter einem primitiven Datiesystem arbeiten solltest das dir nicht die Dateilänge angibt dann wäre das Lesen einer solchen fehlerhaften Textdatei so fatal wie ein C-String ohne finales '\0'.
PS: Es ist nicht, dass ich ein finales '\n' für wichtig halte. Ich wollte nur die Idee dahinter erklären.
-
Optimizer schrieb:
Bashar schrieb:
Stellt sich nur die Frage, ob man als letztes noch eine vollkommen leere Zeile der Länge 0 haben muss,
Das ist keine Zeile.
Beweise es. Wenn ich in einem beliebigen Texteditor in diese nicht-Zeile gehe, wird mir deren Nummer angezeigt.
Auf deutsch, du gehst in 2 bis 3 Texteditoren, die du kennst, in diese Zeile ... tolle Begründung.
Mein C#-Code compiliert, obwohl die letzte nicht-Zeile kein LF hat (aber nicht unwichtig für die Korrektheit des Codes ist).
Wir reden doch über C++, oder nicht? Meditier mal über folgenden Ausschnitt aus dem C99-Draft:
7.19.2 Streams [#1] Input and output, whether to or from physical devices such as terminals and tape drives, or whether to or from files supported on structured storage devices, are mapped into logical data streams, whose properties are more uniform than their various inputs and outputs. Two forms of mapping are supported, for text streams and for binary streams.209) [#2] A text stream is an ordered sequence of characters composed into lines, each line consisting of zero or more characters plus a terminating new-line character. Whether the last line requires a terminating new-line character is implementation-defined. Characters may have to be added, altered, or deleted on input and output to conform to differing conventions for representing text in the host environment. Thus, there need not be a one-to-one correspondence between the characters in a stream and those in the external representation. Data read in from a text stream will necessarily compare equal to the data that were ____________________ 209An implementation need not distinguish between text streams and binary streams. In such an implementation, there need be no new-line characters in a text stream nor any limit to the length of a line. 7.19.1 Library 7.19.2 WG14/N869 Committee Draft -- January 18, 1999 299 earlier written out to that stream only if: the data consist | only of printing characters and the control characters horizontal tab and new-line; no new-line character is immediately preceded by space characters; and the last character is a new-line character. Whether space characters that are written out immediately before a new-line character appear when read in is implementation-defined.Du wirst feststellen, dass der C-Standard sich große Mühe gibt, die exotischsten Textstreamformate zu unterstützen, denk z.B. an Lochkarten und dergleichen. Und von dem Standpunkt aus gesehen, von kleinstem gemeinsamen Nenner, ist meine Aussage gemeint.