2015-01-15 9 views
7

Ich verstehe es nicht, warum fputs und fprintf umgekehrte Reihenfolge.warum fputs und fprintf umgekehrte Reihenfolge

int fputs (const char * str, FILE * stream); 
int fprintf (FILE * stream, const char * format, ...); 
ssize_t write(int fd, const void *buf, size_t count); 

I fprintf Strom in Vorwärts bekannten variablen Argumente zu unterstützen, aber warum Serie fputs nicht halten Konsistenz ???

+3

vor so langer Zeit geschah, ich bin nicht sicher, ob jemand könnte eine Antwort mit absoluter Sicherheit geben. Meine persönliche Überzeugung ist, dass "printf" es aus der Notwendigkeit heraus gemacht hat (wie Sie bereits angemerkt haben), und "fputs" war wahrscheinlich schon damals etabliert, und es wurde als unhaltbar angesehen, es rückgängig zu machen. –

+0

Scott Meyers hat gerade einen Vortrag über API-Design gehalten, in dem er dieses genaue Beispiel als "falsch machen" bezeichnete [https://www.youtube.com/watch?v=5tg1ONG18H8]. – Jeff

+0

'stdio' ist eine schlecht gestaltete Bibliothek im Allgemeinen: Es gibt viele andere Probleme damit. – EJP

Antwort

6

Da diese Dinge wurden vor vielen Jahrzehnten geschrieben, ist es in der Regel nur noch eine Frage von Interesse sein, für Historiker :-)

Es war wahrscheinlich nur eine Design-Entscheidung (oder fehlende Entscheidung), die sie verursacht wird Auf diese Weise und seit ISO-Wert Abwärtskompatibilität haben sie nie geändert.

Es kann sein, dass puts geschrieben wurde zum ersten Mal, und wenn es Zeit ist gekommen fputs zu schreiben, der Entwickler einfach cut'n'pasted es, die neuen Parameter auf das Ende anheftet. Selbst wenn die gleiche Situation für printf/fprintf existierte, wäre dies aufgrund der Notwendigkeit, dass die Variable-Argument-Liste am Ende wäre, nicht möglich gewesen.

Aber Vermutung beiseite, jetzt, dass unser geliebter Dennis weg ist, können wir nie die tatsächlichen Gründe wissen ..

+1

Möge Gott Dennis segnen! Ich interessiere mich nur für sie.Ich war immer davon überzeugt, dass es einen Grund gibt.Vielleicht hast du recht! Danke für deine Antwort! – qianchenglong

+0

Aber scheint Calls fputs (str, stdout) etwas zu drucken, so sollten fputs früher entworfen werden? Ich bin nicht dafür sorgen. – qianchenglong

+0

@qianchenglong, 'puts' darf' fputs' jetzt nennen, aber, wie alle Geschichte, könnte es damals total anders gewesen sein :-) – paxdiablo

Verwandte Themen