Warum gibt fgetc einen int zurueck?



  • Hallo,

    warum gibt fgetc einen int zurueck und nicht einen char? Ich habe gelesen, dass es so ist, weil in char kein eof repräsentieren kann. Aber gibt es dafuer nicht feof. Ansonsten short?

    Danke! Gruß



  • pille_01 schrieb:

    Ich habe gelesen, dass es so ist, weil in char kein eof repräsentieren kann.

    So ist es.

    Aber gibt es dafuer nicht feof.

    feof ist für echtes End-of-file, ferror gibts auch noch. Für beide gibt fgetc EOF zurück. Im Zweifel alles historische Gründe ...

    Ansonsten short?

    Wozu? int sollte der Ganzzahldatentyp sein, mit dem der Rechner am besten umgehen kann.



  • Solche Warum-Fragen sind letztendlich schwer zu beantworten. Warum ist es so? Weil es so im Standard steht. Warum steht es so im Standard? Weil es alle Welt vorher so gemacht hat und man die gängige Praxis festgeschrieben hat. Warum hat alle Welt es vorher so gemacht? Irgendjemand hat es zuerst so gemacht, und dann haben es alle anderen übernommen, damit Code, der für eine andere Plattform entwickelt wurde, auch auf ihrer Plattform kompilierbar ist. Warum hat irgendjemand es ursprünglich so gemacht? Da müsste man ihn schon finden und selbst fragen, aber die Vermutung liegt nahe, dass er EOF mit fgetc abhandeln wollte.

    Es stellt sich ja auch die Frage, was fgetc andernfalls am Dateiende zurückgeben sollte.



  • Ich versteh nicht warum man mehr Speicher reservieren sollte als nötig. Deshalb dachte ich an short.

    Die "So ist es eben"-Antwort habe ich von meinem Prof schon erhalten. Hatte mich nur nicht so richtig zufrieden gestellt. Aber ich werde es wohl so akzeptieren müssen 😉

    Trotzdem Danke für eure Zeit!



  • pille_01 schrieb:

    Ich versteh nicht warum man mehr Speicher reservieren sollte als nötig. Deshalb dachte ich an short.

    Die Rückgabewerte einer Funktion werden meist in CPU-Register zurückgegeben. Da spielt das keine Rolle.
    Und sonst hast du meist auch nur eine einzelne Variable in der du den Wert zwischenspeicherst.
    Danach wird der Wert im String abgelegt.
    Der String besteht ja weiterhin aus char und ist somit platzsparend.



  • Zwischen FILE-I/O und Locking dürfte der Rückgabetyp keine entscheidende Rolle mehr spielen. Wenn du optimieren willst, ist an anderer Stelle mehr zu holen.


Anmelden zum Antworten