Binärproblem



  • Wutz schrieb:

    feof() ohne eine vorige Leseaktion auf dem Stream liefert undefiniertes Verhalten.

    Zitat aus dem Standard bitte.





  • Da steht nichts von undefiniertem Verhalten.



  • Das bestätigt nicht deine Behauptung, und es ist auch nicht der Standard.



  • Ich habe nicht gesagt, dass es im Standard steht oder explizit im Standard steht, das hast du ins Spiel gebracht.
    Ich habe lediglich die (natürlich) im Standard verwendete Formulierung "undefiniertes Verhalten" verwendet;
    wenn du Wert auf Abgrenzung dieser Implizierung legst, formuliere ich dies mal anders:
    "zufälliges Verhalten", was aber an der konkreten Sachlage im betreffenden Programm nichts ändert.



  • Auch das steht nicht auf der von Dir verlinkten Seite. Vielleicht liest (und verstehst) Du das erstmal selber?



  • Das ändert in der Tat nichts, du bist daher immer noch den Beweis deiner Behauptung schuldig.

    edit: gna 🙂



  • Ich bin niemandem etwas schuldig, auch dir nicht.

    feof liefert die Auswertung eines wie auch immer implementierten EOF Flags für einen instanziierten Stream zurück und wird bei jeden fopen/freopen rückgesetzt, d.h. feof liefert erstmal immer logisch false.
    Bei einer leeren Datei liefert demnach feof ohne vorherige Leseaktion ebenso false, nachfolgende Leseaktionen die dieses voraussetzen liefern demzufolge Müll, da sie eben wegen der voranstehendem feof-Abfrage normalerweise nicht nochmal selbst EOF prüfen. feof liefert also false obwohl eigentlich true richtig wäre.
    Da niemand aus dem Programmkontext heraus vorher feststellen kann, ob nun eine leere Datei vorliegt oder nicht, ist die Übereinstimmung des feof-Rückgabewertes mit der tatsächliche Sachlage im aktuellen Stream eben zufällig, unbestimmt, undefiniert oder wie auch immer du diese Situation der Nichtübereinstimmung des feof-Rückgabewertes mit der tatsächlichen Streampositionauswertung beschreiben willst, erst recht in der konkret genannten Funktion, wo FILE* übergeben wird und niemand weiß, was da zuvor ablief.



  • Wutz schrieb:

    Ich bin niemandem etwas schuldig, auch dir nicht.

    Ich hatte aufgrund deines Auftretens hier angenommen, dass du ernstgenommen werden willst.

    feof liefert die Auswertung eines wie auch immer implementierten EOF Flags für einen instanziierten Stream zurück und wird bei jeden fopen/freopen rückgesetzt, d.h. feof liefert erstmal immer logisch false.

    Das ist auch so zu erwarten und ungefähr das Gegenteil von "undefiniert" oder "zufällig".

    Bei einer leeren Datei liefert demnach feof ohne vorherige Leseaktion ebenso false, nachfolgende Leseaktionen die dieses voraussetzen liefern demzufolge Müll, da sie eben wegen der voranstehendem feof-Abfrage normalerweise nicht nochmal selbst EOF prüfen.

    Wieso "normalerweise"? Natürlich muss man immer nach dem Lesen prüfen, ob man EOF erreicht hat. Macht der OP ja auch mehr oder weniger.

    feof liefert also false obwohl eigentlich true richtig wäre.

    Nein, false war richtig. Das EOF-Flag wird erst gesetzt, wenn man versucht hat, über das Ende hinweg zu lesen. Ob die Datei nun leer ist oder nicht, spielt keine Rolle.



  • Du willst meine Worte nicht verstehen oder kannst es nicht, ebenso wie du meine wesentliche Aussage zu dem Thema nicht nennst oder darauf antwortest, sondern sinnentstellend andere Teile dem Zusammenhang reißt.
    Ich für mich beende hier mal.



  • Ist aus C99 2007 Draft von 2007 und entspricht dem C89 Stanbard
    7.19.10.2 The feof function
    Synopsis
    1 #include <stdio.h>
    int feof(FILE *stream);
    Description

    2 The feof function tests the end-of-file indicator for the stream pointed to
    by stream.
    Returns

    3 The feof function returns nonzero if and only if the end-of-file
    indicator is set for stream.

    Ich denke, dass hier deutlich steht, wann die Funktion einen undefinierten Wert zurückliefert.



  • Wenn man komische Erwartungen an die Funktion hat, liefert sie unverständliche Ergebnisse. Das steht da leider nicht 😉



  • Meine Güte, Wutz, liest du eigentlich nie, was andere schreiben? Das mit der feof-Funktion habe ich dir vor ein paar Monaten schon mal gesagt, samt relevanter Stellen im Standard.

    "Lernresistenz" reicht bei dir als Begriff wirklich nicht mehr aus.


Anmelden zum Antworten