### 4.44 `putc`—write a character (macro)

Synopsis

    #include <stdio.h>
    int putc(int ch, FILE *fp);

    #include <stdio.h>
    int _putc_r(struct _reent *ptr, int ch, FILE *fp);

Description
`putc` is a macro, defined in `stdio.h`. `putc` writes the argument ch to the file or stream identified by fp, after converting it from an `int` to an `unsigned char`.

If the file was opened with append mode (or if the stream cannot support positioning), then the new character goes at the end of the file or stream. Otherwise, the new character is written at the current value of the position indicator, and the position indicator advances by one.

For a subroutine version of this macro, see `fputc`.

The `_putc_r` function is simply the reentrant version of `putc` that takes an additional reentrant structure argument: ptr.

Returns
If successful, `putc` returns its argument ch. If an error intervenes, the result is `EOF`. You can use ‘`ferror(fp)`’ to query for errors.

Portability
ANSI C requires `putc`; it suggests, but does not require, that `putc` be implemented as a macro. The standard explicitly permits macro implementations of `putc` to use the fp argument more than once; therefore, in a portable program, you should not use an expression with side effects as this argument.

Supporting OS subroutines required: `close`, `fstat`, `isatty`, `lseek`, `read`, `sbrk`, `write`.