2015-01-15 9 views
7

fputs와 fprintf가 스트림 순서를 역순으로하는 이유는 알지 못합니다.왜 fputs와 fprintf가 스트림 순서를 역순으로 바꾸겠습니까

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); 

개의 가변 인수를 지원하기 위해 앞으로에서 fprintf를 넣어 스트림 알려져 있지만 fputs 왜 일련의 일관성 을 유지하지 ???

+3

, 나는 사람이 절대 확실하게 대답 할 수 없습니다 확신합니다. 내 개인적인 믿음은'printf'가 필연적으로 (필자가 지적했듯이) 그것을했다는 것이고'fputs'는 아마도 이미 그때까지 이미 확립되었을 것입니다, 그래서 그것을 일치시키기 위해 되돌릴 수는 없다고 보았습니다. –

+0

Scott Meyers는 API 디자인에 관해서이 정확한 예제를 "잘못하고있다"[https://www.youtube.com/watch?v=5tg1ONG18H8] 강조했습니다. – Jeff

+0

'stdio'는 일반적으로 저조한 라이브러리입니다. 다른 문제가 많이 있습니다. – EJP

답변

6

이러한 일들이 작성 되었기 때문에 수십 년 전에, 그것은 일반적으로 단지

:-) 역사에 대한 관심의 문제가 될 것 그것은 그들로 인해 아마 단지 디자인 결정 (또는 의사 결정의 부족)이었다 이 방법은 ISO 값의 하위 호환성 때문에 결코 변경하지 않았습니다.

그것은 수도fputs를 작성하는 시간을 왔을 때, puts 먼저 기록 된 것으로하고, 개발자가 단순히 말에 새 매개 변수를 시침, 그것을 cut'n'pasted. printf/fprintf에 대해 동일한 상황이 존재하더라도 가변 인수 목록이 끝에 있어야하므로 가능하지 않습니다.

하지만, 상상 제쳐두고, 지금 우리의 사랑하는 데니스가 사라진 것을, 우리는 실제 이유를 모를 수 있습니다 .. 너무 오래 전에 일어난

+1

데니스에게 신의 축복이 있기를 바랍니다! 나는 그저 관심이 있습니다. 나는 항상 거기에 약간의 이유가 있다는 사실을 믿었습니다. 아마도 당신 말이 맞을 것입니다! 당신의 대답에 감사드립니다! – qianchenglong

+0

하지만 putputs fputs (str, stdout)를 호출하여 뭔가를 인쇄하는 것처럼 보이므로 fputs를 이전에 설계해야합니까? – qianchenglong

+0

@qianchenglong,'puts'는 지금'fputs'를 호출 할 수 있습니다 만, 모든 역사처럼 완전히 뒤떨어져있을 수도 있습니다 :-) – paxdiablo