2015-01-15 41 views
7

Tôi không hiểu tại sao fputs và fprintf ngược dòng thứ tự.tại sao fputs và fprintf thứ tự dòng ngược lại

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

Tôi biết fprintf đưa dòng ở phía trước để hỗ trợ lập luận biến, Nhưng tại sao fputs loạt không giữ sự nhất quán ???

+3

xảy ra cách đây rất lâu, tôi không chắc chắn bất cứ ai có thể đưa ra một câu trả lời một cách chắc chắn tuyệt đối. Niềm tin cá nhân của tôi là 'printf' đã làm nó không cần thiết (như bạn đã lưu ý) và 'fputs' có thể đã được thiết lập bởi sau đó, do đó, đảo ngược nó để phù hợp được xem là không thể phủ nhận. –

+0

Scott Meyers vừa nói chuyện về thiết kế API, nơi ông đã nêu bật ví dụ chính xác này là "làm sai" [https://www.youtube.com/watch?v=5tg1ONG18H8]. – Jeff

+0

'stdio' là một thư viện được thiết kế kém nói chung: có rất nhiều vấn đề khác với nó. – EJP

Trả lời

6

Bởi vì những điều được viết nhiều thập kỷ trước đây, nó thường chỉ là một câu hỏi quan tâm đối với các nhà sử học :-)

Đó là lẽ chỉ là một quyết định thiết kế (hoặc thiếu quyết định) mà khiến cho họ được theo cách này và, vì khả năng tương thích ngược về giá trị ISO, chúng chưa bao giờ thay đổi nó.

thể thể là puts được viết đầu tiên và, khi nó đến thời gian để viết fputs, nhà phát triển chỉ đơn giản cut'n'pasted nó, tacking tham số mới vào cuối. Ngay cả khi tình huống tương tự tồn tại cho printf/fprintf, điều đó sẽ không thể thực hiện được do sự cần thiết cho danh sách đối số biến được kết thúc.

Nhưng, giả sang một bên, bây giờ mà Dennis yêu quý của chúng tôi đã biến mất, chúng ta có thể không bao giờ biết thực tế lý do ..

+1

Xin Chúa ban phước cho Dennis! Tôi chỉ quan tâm đến nó. Tôi luôn luôn tin rằng có một số lý do. Có thể bạn đã đúng! Cảm ơn câu trả lời của bạn! – qianchenglong

+0

Nhưng dường như đặt fputs gọi (str, stdout) để in một cái gì đó, vì vậy fputs nên được thiết kế trước đó? Tôi không đảm bảo nó. – qianchenglong

+0

@qianchenglong, 'puts' có thể gọi' fputs' ngay bây giờ nhưng, giống như tất cả lịch sử, nó có thể hoàn toàn khác nhau sau đó :-) – paxdiablo

Các vấn đề liên quan