getchar
and putchar
are functions, but may additionally be defined as macros. Whether they are or not depends on the implementation. The C standard says regarding standard library functions (C99, 7.1.4@1):
Any function declared in a header may be additionally implemented as a function-like macro defined in the header.