Das Original K & R definiert fgets()
auf S.155 mit einem int
Argument. Der im Buch vorgestellte Code hätte auch mit unsigned int
funktioniert (es benutzt >0
, aber die Schleife ist so geschrieben, dass sie nie unter Null geht).
size_t
wurde später eingeführt, in C89 (ANSI C), als der Typ von sizeof()
. Da dieses Feature speziell zur Harmonisierung der Speicherzuordnung eingeführt wurde, wurden die Speicherfunktionen und String-Funktionen entsprechend aktualisiert. Aber Datei-E/A war nicht: die einzigen Dateifunktionen, die in C89 size_t
verwendeten, sind die neuen eingeführt von C89 und nicht vorhanden in K & R wie zum Beispiel fread()
/fwrite()
. Ja, K & R hatte nicht diese Funktionen und stützte sich für bloc-Operationen nur auf (nicht portable) Unix-Lese-/Schreibfunktionen mit Dateideskriptoren.
Es ist zu beachten, dass die POSIX standard, die die Unix-Funktionen harmonisiert, parallel zu der ANSI-C-Standard und issued late 1988 entwickelt wurde. Dieser Standard hat viele Unix-Funktionen zur Verwendung size_t
harmonisiert, so dass read()
/write()
heutzutage mit size_t
definiert sind. Aber für die C-Standardbibliothek Funktionen wie fgets()
, gibt POSIX Vorrang die C-Standard (Wortlaut der aktuellen Version des Standard):
Die Funktionalität auf dieser Referenzseite beschrieben mit dem ISO-C-Standard ausgerichtet ist, . Ein Konflikt zwischen den hier beschriebenen Anforderungen und der ISO C-Norm ist nicht beabsichtigt.
in POSIX So auch ironischerweise fgets()
noch int
von seinem historischen K & R geerbt.
Edit: zusätzliche Lese
stdio.h: Dieser Header definiert und prototypisiert die meisten der in Kapitel 7 von K &R aufgeführten Funktionen. Wenige, wenn überhaupt, Änderungen wurden in den Definitionen vorgenommen, die in K & R gefunden wurden, aber einige neue Funktionen wurden hinzugefügt.
In der C-Standardbibliothek gibt es keine Konsistenz. Funktionen haben sich im Laufe der Zeit entwickelt. 'size_t' hat vielleicht nicht existiert, als' fgets' eingeführt wurde (nur meine Vermutung). – user694733
https://groups.google.com/forum/#!topic/comp.std.c/FnENEIlCidg – artm
Hysterische Rosinen. Wahrscheinlich wurde eine frühe Implementierung von (vor der Standardisierung) verwendet, um "int" zu verwenden, und es wurde nach "Kompatibilität" weitergeführt, wenn C standardisiert wurde. Und ich stimme ab, als * auf der Meinung von Meinungen * zu schließen. –