### 4.32 `getc`—read a character (macro)

Synopsis

         #include <stdio.h>
         int getc(FILE *fp);

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

Description
`getc` is a macro, defined in `stdio.h`. You can use `getc` to get the next single character from the file or stream identified by fp. As a side effect, `getc` advances the file's current position indicator.

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

The `_getc_r` function is simply the reentrant version of `getc` which passes an additional reentrancy structure pointer argument: ptr.

Returns
The next character (read as an `unsigned char`, and cast to `int`), unless there is no more data, or the host system reports a read error; in either of these situations, `getc` returns `EOF`.

You can distinguish the two situations that cause an `EOF` result by using the `ferror` and `feof` functions.

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

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