Why are C I/O functions inconsistent among themselves? : <p>Consistency is fundamental property in a code base, let alone in a programming language that eventually turned out to be the most used in the world.</p>

<p>There are two families of I/O functions in C: formatted and unformatted. These are:</p>

<pre><code>int fprintf(FILE *stream, const char *format, ...);
int vfprintf(FILE *stream, const char *format, va_list ap);
</code></pre>

<p>And</p>

<pre><code>int fputc(int c, FILE *stream);
int fputs(const char *s, FILE *stream);
int putc(int c, FILE *stream);
</code></pre>

<p><code>*fprintf</code> seems to go for the <code>(where, what)</code> ordering whereas <code>*put*</code> for <code>(what, where)</code>; same holds for input functions. Why is the <strong><code>stream</code></strong> parameter at <strong>different positions</strong>? Are there any <strong>historical</strong>/<strong>design</strong> motivations for such choice?</p>
